九度OJ 1111:单词替换 (查找)

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:4473

解决:1268

题目描述:

输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

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

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

样例输入:
You want someone to help you
You
I
样例输出:
I want someone to help you
来源:
2007年北京大学计算机研究生机试真题

思路:

用二维字符串数组存储,查找字符串并替换即可,复杂度O(n)。

如果有很多单词要被替换,就要考虑排序了。此题并不需要。


代码:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define M 100
 
int main(void)
{
    int i;
    int n;
    char a[M][M+1], b[M+1], c[M+1], tmp[M+1];
 
    while (gets(tmp))
    {
        n = 0;
        i = 0;
        while (tmp[i])
        {
            sscanf(tmp+i, "%s", a[n++]);
            while(isalpha(tmp[i]))
                i ++;
            if (tmp[i] == ' ')
                i ++;
        }
 
        scanf("%s", b);
        scanf("%s", c);
        getchar();
 
        for (i=0; i<n; i++)
        {
            if (strcmp(a[i], b) == 0)
                strcpy(a[i], c);
        }
 
        for (i=0; i<n-1; i++)
            printf("%s ", a[i]);
        printf("%s\n", a[i]);
    }
 
    return 0;
}
/**************************************************************
    Problem: 1111
    User: liangrx06
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:916 kb
****************************************************************/


你可能感兴趣的:(字符串,查找,C语言,OJ,九度)