单词替换(C)

单词替换

http://www.nowcoder.com/questionTerminal/5b58a04679d5419caf62c2b238e5c9c7

是不是可以有一种不替换的方法,一个一个字符的输出,遇到a则输出b,遇到非a则正常输出

#include<stdio.h>
#include<string.h>

int main()
{
    char str[200];
    char a[105];
    char b[105];
    int i,index;
    int flag = 1; // flag=1表示到达一个单词的起始位置,flag=0则直接跳过
    gets(str);
    gets(a);
    gets(b);
    for(i = 0;;)
    {
        if(str[i] == ' ')
        {
            flag = 1; //下一次将是单词开始
            printf("%c",str[i]);
            i++;
            continue;

        }
        else if(str[i]!= ' ' && flag) // 到达单词开始
        {
            flag = 0;
            if(!strncmp(&str[i],a,strlen(a)) && str[i+(int)strlen(a)] == ' ') // 恰是要替换的单词(非前缀)
            {
                for(int j = 0;j<strlen(b);j++) //直接输出b
                    printf("%c",b[j]);
                i = i+strlen(a);// 让下标跳到下一个单词位置
            }
            else // 不是要替换的单词则直接输出该单词
            {
                for(int j = i;;)
                {
                    if(str[j] == '\0')
                    {
                        i = j;
                        break;
                    }
                    else if(str[j] == ' ')
                    {
                        i = j+1;
                        printf("%c",str[j]);
                        flag = 1;
                        break;
                    }
                    else
                        printf("%c",str[j++]);
                }
            }
        }
        else if(str[i] == '\0') // 到达句子结尾
            break;
        else
            ;
    }
    printf("\n");
    return 0;
}
全部评论

相关推荐

矫健的闭门羹烹饪师又熬夜了:本人双非本,在鹅厂测开实习,你这个简历上写的这两个项目的技术栈都差不多,能够让面试官去延伸去问的八股除了redis就再没啥了,建议项目这边可以再改改,然后专业技能那块的话,感觉linux和测试工具可以分开写,毕竟不是干一件事的,反正没实习的基础上面试就深挖项目和八股,好好卷吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 15:07
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务