这里我试图在字符串中查找子字符串,反转子字符串并将其替换为原始字符串。如果我用if条件替换while循环,它适用于第一次出现。但是我希望它可以用于多次出现。 如果我在while循环中运行它(while(str = strstr(str,substr)),它会导致分段错误。我正在使用codeblocks IDE。 那么,我怎样才能改变代码,以便它可以用于多次出现?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *str = malloc(100);
char *sbstr = malloc(20);
int i=0,flag=1;;
printf("%s\n","Enter string");
gets(str);
printf("%s\n","Enter substring");
gets(sbstr);
/////////////////////////////////////////////////////////////
while(str = strstr(str,sbstr))
{
memcpy(str,strrev(sbstr),strlen(sbstr));
}
////////////////////////////////////////////////////
printf("%s",str);
return 0;
}
答案 0 :(得分:0)
更好,更有效的循环可行:(仔细看)
char* first_p; //will store the address of the first character of sbstr in str if it does
while(i < LENGTH_OF_STR) //if smaller than the length of the main array
{
if(str[i] == sbstr[k])
{
k++:
if(k == LENGTH_OF_SBSTR)
{
//sbstr is in str
first_p = str+i-LENGTH_OF_SBSTR-1; //now first_p stores the pointer to the first letter
reverse(first_p,LENGTH_OF_SBSTR);// reversing the string
break;
}
}
else
{
k = 0;
}
i++;
}
void reverse(char *toReverse,int len)
{
int i;
char temp;
for (i=len-1; i >= len/2; i--)
{
temp = toReverse[i];
toReverse[i] = toReverse[len-1-i];
toReverse[len-1-i] = temp;
}
}