您的位置:首页 > 其它

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

2015-07-20 20:59 337 查看
这题刚开始写出来之后一直不知道哪里错了,就一部一部的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: