【嵌入式系統學習記錄】練習:判斷一個字串是不是另一個字串的子串;(比如"ab"是"aabcd"的子串)
阿新 • • 發佈:2019-02-17
#include<stdio.h> #include<stdlib.h> #include<string.h> char *jungle(char *p1, char *p2, int size1, int size2) { int i, n, m; char *s1 = "NO!"; char *s2 = "YES!"; /* char *temp = (char *)malloc(sizeof(char) * 50); char *temp2 = temp; if(NULL == temp) { printf("malloc failure!\n"); exit(1); }*/ if(size1 <= size2) { return s1; } else { for(n = 0; n < size1 - size2 + 1; ++n) { /* for(i = 0; i < size2; ++i) { *temp++ = *p1++; } temp = temp2; if(strcmp(temp, p2) != 0) { temp++; for(m = 0; m < size2; ++m) { p1--; } p1++; *temp = *temp2; p1 = p1 -size2 + 1; } else { return s2; break; }*/ if(strncmp(p2, p1+n, size2) == 0)//strncmp可以實現一定個數的字串相比較,省去了註釋掉的程式碼,減少了很多程式碼量 { return s2; } } return s1; } } int main() { int length1, length2; char *father = (char*)malloc(sizeof(char) * 50); char *son = (char*)malloc(sizeof(char) * 50); printf("please enter a long words:\n"); scanf("%s",father); printf("please enter a short words:\n"); scanf("%s",son); if(NULL == father || NULL == son) { printf("malloc failure!\n"); exit(1); } length1 = strlen(father); length2 = strlen(son); printf("%s",jungle(father, son, length1, length2));//通過指標傳參和返回結果 free(father);//malloc之後要通過手動釋放記憶體 free(son); return 0; }