字符串 替换
输入一串 字符串。将字符串中出现的solt(不管大小写) 替代为soy sauce。我的问题,我的代码只能代替第一次出现的salt,后面出现就不会替代了。
最好可以在我的代码上修改,谢谢~
# include <stdio.h>
# include <string.h>
main()
{
int i,j,k,q,n=0;
char st1,st2,st3,st4="soy sauce";
while( gets(st1) != NULL )
{
for(i=0;st1 != '\0';i++)
{
if(st1 >= 65 && st1 <=90)
st2=st1+32;
else
st2=st1;
}//上面代码将所有大写替代小写,方便下面查找salt
st2='\0';
for(i=0;st2 != '\0';i++)
{
if(st2=='s' && st2=='a' && st2=='l' && st2=='t')
{ //判断
j=i;
for(k=0;st4!='\0';k++)
{
st3=st4;
j++;
} //将salt 替换
st3='\0';
for(q=i+4;st1 != '\0';q++)
{
st3=st1;
j++;
}//将后面的字符串接上去。
st3='\0';
printf("%s",st3);
break; //由于我的代码只会检查一次salt,所以后面有salt 就不会替换了
}
else
st3=st1;
}
}
} 本帖最后由 康小泡 于 2015-11-23 20:13 编辑
这是尽量按照你原来的代码改的~
# include <stdio.h>
# include <string.h>
int main()
{
int i, j, k, n;
char st1 = { 0 }, st3, st4 = "soy sauce";
gets(st1);
while (st1 != '\0')
{
n = 0;//发生替换的次数
for (i = 0; st1 != '\0'; i++)//将大写替换成小写(原地改就行,不用转存到st2,这样比较省空间)
if (st1 >= 65 && st1 <= 90)
st1 = st1 + 32;
for (i = 0; st1 != '\0'; i++)
{
if (st1 == 's' && st1 == 'a' && st1 == 'l' && st1 == 't')
{ //判断
j = i + 5 * n;
for (k = 0; st4 != '\0'; k++)
{
st3 = st4;
j++;
}//将salt替换成soy sauce
n++;
i = i + 3;
}
else
st3 = st1;
}
st3 = '\0';
printf("%s\n", st3);
gets(st1);
}
return 0;
} 本帖最后由 康小泡 于 2015-11-23 20:13 编辑
#include <Iostream>
#include <Windows.h>
#include <Stdlib.h>
using namespace std;
#define SRC "solt"
#define DES "soy sauce"
int main(void)
{
//缓冲区
char a={0},b={0};
//cin>>a;
gets(a);
//缓冲区长度
int len = strlen(a);
char *p = b;
//被替换的字符串长度
for (int i = 0; i < len;i++)
{
if( 0==strncmp(a+i,SRC,strlen(SRC)) )
{
strcat(b,DES);
p+=strlen(DES);
i+=strlen(SRC)-1;
}
else
{
*p++ = a;
}
}
cout<<b;
system("Pause");
return 0;
} 迷雾少年 发表于 2015-11-22 15:02
#include
#include
#include
cout<<b; 最后这个是什么意思,我指针 学的不太好,有点不明白 独一无② 发表于 2015-11-22 15:57
cout
这个是C++的,输出b的意思 不错,不错
页:
[1]