如何在另一个子串中找到多个子串并执行“一些”操作?

时间:2016-10-28 17:41:18

标签: c string

这里我试图在字符串中查找子字符串,反转子字符串并将其替换为原始字符串。如果我用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;

}

1 个答案:

答案 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;
    }

 }