首页 > 试题广场 >

单词替换

[编程题]单词替换
  • 热度指数:41678 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

输入描述:
每组数据输入包括3行,第1行是包含多个单词的字符串s,第2行是待替换的单词a(长度<=100),第3行是a将被替换的单词b(长度<=100)。s, a, b 最前面和最后面都没有空格。


输出描述:
每个测试数据输出只有 1 行, 将s中所有单词a替换成b之后的字符串。
示例1

输入

You want someone to help you
You
I

输出

I want someone to help you
#include <stdio.h>
#include <string.h>

int main() {
    char str[101] ,a[101],b[101];
        gets(str);
        gets(a);
        gets(b);
        int s[100],l=0,len=strlen(a);
        for(int i=0,j=0;i<strlen(str);i++){
            if(str[i]==a[j]){
                char temp[len+1];
                for(int p=0;p<len;p++){
                    temp[p]=str[i+p];
                }
                if(i!=0&&i!=strlen(str)-1&&str[i-1]==' '&&str[i+len]==' '){
                    if(strcmp(temp,a)==0){
                    s[l++]=i+len;
                }
            }
            else if(i==0&&str[i+len]==' '){
                if(strcmp(temp,a)==0){
                    s[l++]=i+len;
                }
            }
            else if(i==strlen(str)-1&&str[i-1]==' '){
                if(strcmp(temp,a)==0){
                    s[l++]=i+len;
            }
            }

        }
        } 
        if(l==0){
            printf("%s",str);
            return 0;
        }
        char sum[100];
        int i=0;
        for(int n=0;n<l;n++){
            int temp=s[n]-strlen(a);
            char c[101]={'\0'},d[101]={'\0'};
            for(int j=0;i<temp;i++){
            c[j++]=str[i];
            }
            i+=strlen(a);
            strcat(sum,c);
            strcat(sum,b);
            if(n==l-1){
                int k=0;
                for(int j=s[n];j<strlen(str);j++){
                d[k++]=str[j];
            }
            strcat(sum,d);
        }
        }
        printf("%s\n",sum);
    return 0;
}
发表于 2023-03-05 21:59:49 回复(0)
  • 利用sscanf从读取的一整行字符串中提取每个单词,然后按要求将单词替换掉
  • 注意:fgets会读取换行符,要把换行符去掉
    #include <stdio.h>
    #include <string.h>
    
    #define maxn 110
    
    char s[maxn][maxn];
    char temp[maxn];
    char a[maxn], b[maxn];
    
    void erase_n(char *s)
    {
        if (s[strlen(s) - 1] == '\n')
            s[strlen(s) - 1] = '\0';
    }
    
    int main()
    {
        while (fgets(temp, maxn, stdin) != NULL)
        {
            erase_n(temp);
            char *sp = temp;
            int num;
            for (num = 0; sp < temp + strlen(temp) && sscanf(sp, "%s", s[num]) != EOF;sp += strlen(s[num]) + 1, num++);
            fgets(a, maxn, stdin), erase_n(a);
            fgets(b, maxn, stdin), erase_n(b);
            for (int i = 0; i < num; i++)
            {
                if (!strcmp(s[i], a))
                {
                    strcpy(s[i], b);
                }
            }
            for (int i = 0; i < num; i++)
            {
                printf("%s", s[i]);
                printf("%s", i != num - 1 ? " " : "\n");
            }
        }
    
        return 0;
    }

发表于 2022-03-05 14:14:23 回复(0)