题目:编写一个程序实现将字符串中的所有"you"替换成"we"
输入: 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束
输出: 对于输入的每一行,输出替换后的字符串
#include<stdio.h>
#include<string.h>
int main()
{
char str[1000];
int i=0,strlong,flag[333],n; //strlong用来储存str的长度,flag用来储存you中u的位置
printf("Please input string!\n");
while((scanf("%c",&str[i++])!=EOF)&&i<=1000) //输入后按Enter,再按ctrl+z
{
continue;
}
printf("%s", str);
strlong=strlen(str);
for(i=0,n=0;i<=strlong;i++)
{
if(str[i]=='y'||str[i]=='Y')
{
if(str[i+1]=='o'||str[i+1]=='O')
{
if(str[i+2]=='u'||str[i+2]=='U') //判断是否为单词you
{
if(str[i]=='Y')
str[i]='W';
else //保证字母大小写相同
str[i]='w';
if(str[i+1]=='O')
str[i+1]='E';
else
str[i+1]='e';
flag[n++]=i+2; //储存u的位置,便于将u覆盖,n++是最后优先级是最低的
}
}
}
}
for(n=0;flag[n]!='\0';n++) //这里就是将u后面的字符向前移动一位
{
//替换一个you后因为后面的字符整体前移了
if(n==0)
i=flag[n];
else //所以flag中储存的u的位置就要减去1,替换两个后
i=flag[n]-n; //整体前移两位,就要减去2,以此类推
for(;i<=strlong;i++)
{
str[i]=str[i+1]; //直接把i=flag[n]放在第二个for(i=flag[n];;)中
}
}
printf("%s",str);
return 0;
}
EOF:end of file,文件终端
在Windows中按Ctrl+z就是在缓存里就会读取到EOF;
一个字符数组,没有初始化的部分默认都是\0结束符,所以下面这个
for(n=0;flag[n]!='\0';n++)
只会循环到被初始化过的,也就是给他赋值的地方,即循环you的个数;