diff --git a/.gitignore b/.gitignore index 348e7e4..1033eb9 100644 --- a/.gitignore +++ b/.gitignore @@ -154,3 +154,9 @@ Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/5ccdb9c64312b2ee/16_REVERSEBITS.ipch Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/969dd2cbf6a00d1b/16_REVERSEBITS.ipch Alogrithm/.vs/Alogrithm/v16/TestStore/0/003.testlog Alogrithm/Alogrithm/Debug/16_ReverseBits.obj +Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/13d1a063a12e2911/17_WORDBREAK.ipch +Alogrithm/Alogrithm/Debug/17_WordBreak.obj +*.tlog +*.coverage +*.testlog +*.ipch diff --git a/Alogrithm/.vs/Alogrithm/v16/.suo b/Alogrithm/.vs/Alogrithm/v16/.suo index 644a4f6..245c35e 100644 Binary files a/Alogrithm/.vs/Alogrithm/v16/.suo and b/Alogrithm/.vs/Alogrithm/v16/.suo differ diff --git a/Alogrithm/Alogrithm/Alogrithm.vcxproj b/Alogrithm/Alogrithm/Alogrithm.vcxproj index e5c3a6e..0351099 100644 --- a/Alogrithm/Alogrithm/Alogrithm.vcxproj +++ b/Alogrithm/Alogrithm/Alogrithm.vcxproj @@ -89,6 +89,7 @@ WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) false $(IntDir)%(RelativeDir) + stdc11 Console @@ -148,6 +149,7 @@ + @@ -167,6 +169,7 @@ + @@ -185,6 +188,7 @@ + diff --git a/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters b/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters index 97af554..082749f 100644 --- a/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters +++ b/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters @@ -75,6 +75,9 @@ 源文件\src + + 源文件\src + @@ -125,6 +128,9 @@ 头文件\include + + 头文件\include + @@ -175,5 +181,8 @@ 资源文件\config + + 资源文件\config + \ No newline at end of file diff --git a/Alogrithm/Alogrithm/config/17_WordBreak.ini b/Alogrithm/Alogrithm/config/17_WordBreak.ini new file mode 100644 index 0000000..a68ed95 --- /dev/null +++ b/Alogrithm/Alogrithm/config/17_WordBreak.ini @@ -0,0 +1,16 @@ +[Test1] +Input1=cppcode +Input2=cpp,code +Output=1 +[Test2] +Input1=catsanddog +Input2=cats,sand,dog +Output=0 +[Test3] +Input1=catsanddog +Input2=cats,and,dog +Output=1 +[Test4] +Input1=catsanddog +Input2=cats,and,dog +Output=1 \ No newline at end of file diff --git a/Alogrithm/Alogrithm/include/17_WordBreak.h b/Alogrithm/Alogrithm/include/17_WordBreak.h new file mode 100644 index 0000000..d98e4f9 --- /dev/null +++ b/Alogrithm/Alogrithm/include/17_WordBreak.h @@ -0,0 +1,6 @@ +#pragma once +#include +#include +#include + +bool WordBreak(char* s, char** wordDict, int wordDictSize); \ No newline at end of file diff --git a/Alogrithm/Alogrithm/src/17_WordBreak.cpp b/Alogrithm/Alogrithm/src/17_WordBreak.cpp new file mode 100644 index 0000000..091b488 --- /dev/null +++ b/Alogrithm/Alogrithm/src/17_WordBreak.cpp @@ -0,0 +1,44 @@ +#include "../include/17_WordBreak.h" +//ĿһǿַsһǿյбֵwordDict +// жsǷԱոΪһֵгֵĵ +//˼·ַsĵһַʼsǰword_lenֵַеԪرȽϣƥ䵽ͬģӦöλ1 +// ÿöλ1ǰȿһλǷΪҲΪ1Ϊ10һֱһַһַödp[s_len] +bool WordBreak(char* s, char** wordDict, int wordDictSize) { + int s_len = strlen(s); // ȡsij + //쳣ж + if (wordDict == NULL || wordDictSize == 0 || s == NULL) { + return false; + } + // һdp飬ʾǰ±ʱǰĸǷ㱻ʼΪfalse + bool *dp = (bool *)malloc(sizeof(bool)*(s_len + 1)); + memset(dp, false, sizeof(bool) * (s_len + 1)); + dp[0] = true; // 0ҪʼΪtrue + + // ӵһĸʼ + for (int i = 1; i <= s_len; i++) { + // ӵһʿʼ + for (int j = 0; j < wordDictSize; j++) { + // ȡǰȽϵĵʳ + int word_len = strlen(wordDict[j]); + // sǰλǰword_lenλÿʼworDictбȽǷ + int k = i - word_len; //kͬʱҲdp[]һε״̬ + // k < 0ʾ˹ͷˣ϶ + if (k < 0) { + continue; + } + // ǰiλú͵ǰȽϵwordDictȣôǰkλ֮ǰҲҪǰIJ㣬ʹڴk~iҲû + if (strncmp(s + k, wordDict[j], word_len) == 0) { + dp[i] = (dp[k] && dp[0]); + } + // iλˣҪٱȽϺworDictˣֱӱȽһiλü + if (dp[i] == 1) { + break; + } + } + } + for (int t = 0; t < s_len; t++) + printf("%d ", dp[t]); + // sһλǷз + return dp[s_len]; + +} diff --git a/Alogrithm/Alogrithm/src/main.cpp b/Alogrithm/Alogrithm/src/main.cpp index 6fb3c89..906a4ae 100644 --- a/Alogrithm/Alogrithm/src/main.cpp +++ b/Alogrithm/Alogrithm/src/main.cpp @@ -1,9 +1,7 @@ #include -#include "../include/16_ReverseBits.h" int main() { - printf("%ld\n", ReverseBits(1)); return 0; } diff --git a/Alogrithm/UnitTest/UnitTest.cpp b/Alogrithm/UnitTest/UnitTest.cpp index 8b0fe93..a81c013 100644 --- a/Alogrithm/UnitTest/UnitTest.cpp +++ b/Alogrithm/UnitTest/UnitTest.cpp @@ -18,6 +18,7 @@ using namespace Microsoft::VisualStudio::CppUnitTestFramework; #define FileName_14 "../Alogrithm/config/14_SingleNumber.ini" #define FileName_15 "../Alogrithm/config/15_WordPattern.ini" #define FileName_16 "../Alogrithm/config/16_ReverseBits.ini" +#define FileName_17 "../Alogrithm/config/17_WordBreak.ini" namespace UnitTest @@ -310,4 +311,26 @@ namespace UnitTest } } }; + TEST_CLASS(UnitTest_17) + { + TEST_METHOD(TestMethode1) + { + char Section_Name[100][10] = { 0 }; + int Section_Count = CalcCount(100, Section_Name, FileName_17); + CString Input1, Input2,Output; + char Str_char[1024] = { 0 }; + char *WordDic[100]; + for (int i = 0; i < Section_Count; i++) { + GetPrivateProfileString(Section_Name[i], "Input1", " ", Input1.GetBuffer(200), 200, FileName_17); + GetPrivateProfileString(Section_Name[i], "Input2", " ", Input2.GetBuffer(500), 500, FileName_17); + GetPrivateProfileString(Section_Name[i], "Output", " ", Output.GetBuffer(20), 20, FileName_17); + + strcpy(Str_char, Input1); + int Wordic_count = str_device3(Input2, WordDic); + bool nReal = WordBreak(Str_char, WordDic, Wordic_count); + Assert::AreEqual(nReal, CstrToBool(Output)); + } + + } + }; } diff --git a/Alogrithm/UnitTest/UnitTest.vcxproj b/Alogrithm/UnitTest/UnitTest.vcxproj index 1e9fecc..8699c55 100644 --- a/Alogrithm/UnitTest/UnitTest.vcxproj +++ b/Alogrithm/UnitTest/UnitTest.vcxproj @@ -103,7 +103,7 @@ Windows $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) DebugFull - ../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;../Alogrithm/Debug/11_CanWinNim.obj;../Alogrithm/Debug/12_IsValid.obj;../Alogrithm/Debug/13_MyAtoi.obj;../Alogrithm/Debug/14_SingleNumber.obj;../Alogrithm/Debug/15_WordPattern.obj;../Alogrithm/Debug/16_ReverseBits.obj;%(AdditionalDependencies) + ../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;../Alogrithm/Debug/11_CanWinNim.obj;../Alogrithm/Debug/12_IsValid.obj;../Alogrithm/Debug/13_MyAtoi.obj;../Alogrithm/Debug/14_SingleNumber.obj;../Alogrithm/Debug/15_WordPattern.obj;../Alogrithm/Debug/16_ReverseBits.obj;../Alogrithm/Debug/17_WordBreak.obj;%(AdditionalDependencies) diff --git a/Alogrithm/UnitTest/pch.cpp b/Alogrithm/UnitTest/pch.cpp index 39c05ed..996e6c5 100644 --- a/Alogrithm/UnitTest/pch.cpp +++ b/Alogrithm/UnitTest/pch.cpp @@ -88,6 +88,24 @@ int str_device2(CString str, char(*return_str)[50]) } return value_count; //返回数组首地址 } +int str_device3(CString str, char* *return_str) +{ + int value_count = 0; + char* token; //存放被切割后的第一个子串 + char Section_value[500] = { 0 };//存放nums转换成string类型的结果 + memset(Section_value, 0, sizeof(char) * 500); + strcpy(Section_value, str);//将CString类型的字符串转换成char类型,方便后面切割字符串 + //获得切割到的第一个字符串 + token = strtok(Section_value, ","); + /* 继续获取其他的子字符串 */ + while (token != NULL) { + return_str[value_count] = (char*)malloc(sizeof(char) * 100); + strcpy(return_str[value_count], token); + token = strtok(NULL, ","); + value_count++; //记录存了多少个元素 + } + return value_count; //返回数组首地址 +} //字符串转bool bool CstrToBool(CString str) { diff --git a/Alogrithm/UnitTest/pch.h b/Alogrithm/UnitTest/pch.h index 4c93404..6681e82 100644 --- a/Alogrithm/UnitTest/pch.h +++ b/Alogrithm/UnitTest/pch.h @@ -29,11 +29,13 @@ #include"../Alogrithm/include/14_SingleNumber.h" #include"../Alogrithm/include/15_WordPattern.h" #include"../Alogrithm/include/16_ReverseBits.h" +#include"../Alogrithm/include/17_WordBreak.h" int CalcCount(int n, char(*str)[10],const char *FileName); int* str_device(CString str, int* value_count); int str_device2(CString str, char(*return_str)[50]); +int str_device3(CString str, char**return_str); bool CstrToBool(CString str);