69,336
社区成员
发帖
与我相关
我的任务
分享
21
22 int del_substr_func(char *src, const char* substr)
23 {
24 int i = 0, times = 0;
25 int src_len = strlen(src);
26 int substr_len = strlen(substr);
27
28 while( src[i] )
29 {
30 if( strncmp(&src[i], substr, substr_len) == 0)
31 {
32 // memset( &src[i], 0, substr_len);
33
34 strncpy( &src[i], (const char *) &src[i + substr_len], (src_len - i - substr_len ));
35
36 memset( &src[src_len - substr_len ] , 0, substr_len ); // 必须要用这个操作,否则后面如果出现字串的话,在拷贝字串串,一直会存在字串
37
38 printf("\n ##### Deleting arrSrcstr: %s\n", src);
39
40 times ++;
41 }
42
43 i++;
44 }
45
46 return times;
47 }
48 int main (void )
49 {
50 // char arrSrcstr[] = "AAABBBBBCCCAABBBCCCAABBAAABBDDDDAA";
51 // const char *substr = "AA";
52 char arrSrcstr[] = "boyhelloboysIboybloveboyyouboheihieboysboy";
53 const char *substr = "boy";
54
55 printf("\n ##### Before del arrSrcstr: %s\n", arrSrcstr);
56
57 int RetVal = del_substr_func( arrSrcstr, substr);
58
59 printf("\n ##### After del arrSrcstr: %s\n", arrSrcstr);
60 printf("\n ##### del times :%d\n", RetVal);
61
62 return 0;
63 }
结果
##### Before del arrSrcstr: boyhelloboysIboybloveboyyouboheihieboysboy
##### Deleting arrSrcstr: helloboysIboybloveboyyouboheihieboysboy
##### Deleting arrSrcstr: hellosIboybloveboyyouboheihieboysboy
##### Deleting arrSrcstr: hellosIbloveboyyouboheihieboysboy
##### Deleting arrSrcstr: hellosIbloveyouboheihieboysboy
##### Deleting arrSrcstr: hellosIbloveyouboheihiesboy
##### Deleting arrSrcstr: hellosIbloveyouboheihies
##### After del arrSrcstr: hellosIbloveyouboheihies
##### del times :6
5 int del_substr(char *src, const char *substr)
6 {
7 int i = 0, j = 0;
8 int substr_len = strlen(substr);
9 int src_len = strlen(src);
10 if (src_len < substr_len)
11 {
12 printf(" substr is longer than src\n");
13 return -1;
14 }
15
16 for(j = 0 ; j < src_len && src[j] != '\0'; j++)
17 {
18
19 if( strncmp(&src[j], substr, substr_len) == 0 )
20 {
21 memset( &src[j] , 0, substr_len);
22
23 strncpy( &src[j] , &src[j+substr_len], (src_len - j - substr_len));
24 memset(&src[src_len - substr_len], 0, substr_len);
25 i++;
26 }
27
28 }
29
30 return i;
31 }
32 int main (void )
33 {
34
35 char src[] = "bookshoolbookstudentarebook";//字符串
36 const char *substr="book";//子字符串
37 printf(" ##### src = %s \n", src);
38 int num = del_substr(src, substr);
39
40 printf(" ##### num = %d \n", num);
41 printf(" ##### src = %s \n", src);
42 return 0;
43 }
结果:
##### src = bookshoolbookstudentarebook
##### src = shoolbookstudentarebook
##### i = 1
##### src = shoolstudentarebook
##### i = 2
##### src = shoolstudentare
##### i = 3
##### num = 3
##### src = shoolstudentare
你自己看看把
for(j;j<j+m-1;j++)
//j<j+m-1这个条件是要闹哪样啊,只要m>1就必然是死循环啊。