strstr函数的被查找字符串与查找到的字符串是互相影响的,同时可以只用i--控制循环不变

来源:互联网 发布:北京黑马程序员地址 编辑:程序博客网 时间:2024/06/04 23:33

这题刚开始写出来之后一直不知道哪里错了,就一部一部的dbug,最后终于发现原来strstr的被查找字符串改变会影响查找到的

字符串,感觉自己写的不够简便,查了一些别人的,看到别人是用strstr函数的查找到的字符串会影响被查找的字符串的性质来写的

,代码中注释部分是用被查找影响查找字符串的性质做的,比较麻烦,下面是用其逆性质来写的,比较简单,另外注意此题使用i--控制

循环不变而不需要使用死循环:

讲解下strstr的性质:注释部分是输出

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<algorithm>
#include<set>
using namespace std;
int main()
{
     char s[50]="abcdfg";
     char s1[50]="abc";
     char *p=strstr(s,s1);
     strcat(s,"higk");
     printf("%s\n",p);//abcdefghigk
     strcat(p,"lmn");
     printf("%s\n",s);//abcdefghigklmn
    return 0;
}

题目代码:

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cctype>#include<cmath>#include<set>using namespace std;char s[20][100],s1[20][100],s2[300];int main(){    int t;    while(cin>>t&&t)    {        getchar();        for(int i=0;i<t;i++)        {            gets(s[i]);            gets(s1[i]);        }        gets(s2);        for(int i=0;i<t;i++)        {           /* while(1)            {                if(strstr(s2,s[i])!=NULL)                {                    char *ss;                    ss=strstr(s2,s[i]);                    int len=strlen(s2)-strlen(ss);                    char sst[300];                    strcpy(sst,s2);                    if(len!=0)                    {                        sst[len]='\0';                        strcat(sst,s1[i]);                        strcat(sst,ss+strlen(s[i]));                    }                    else                    {                        sst[0]='\0';                        strcat(sst,s1[i]);                        strcat(sst,ss+strlen(s[i]));                    }                    strcpy(s2,sst);                }                else                    break;            }*/            char *p=strstr(s2,s[i]);            char temp[300];            if(p!=NULL)            {                strcpy(temp,p+strlen(s[i]));                strcpy(p,s1[i]);                strcpy(p+strlen(s1[i]),temp);                i--;            }        }        printf("%s\n",s2);    }    return 0;}


0 0