编写一个程序实现将字符串中的所有“you“替换成“we“

题目:编写一个程序实现将字符串中的所有"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的个数;

猜你喜欢

转载自blog.csdn.net/weixin_42224577/article/details/108799199