算法笔记练习 3.6 字符串处理 问题 D: 单词替换

算法笔记练习 题解合集

题目链接

题目

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

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

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

样例输入
I love Tian Qin
I
You

样例输出
You love Tian Qin

思路

  1. input,find,replace 分别接收字符串 s,单词 a,单词 b
  2. 把 input 的数据写入二维字符数组 words,使得 words 的每一行代表 input 中的一个单词
  3. 在 words 中进行单词的查找替换
  4. 输出 words 作为最终结果

细节:
在第 2 步中顺便用变量 cnt 来统计单词总数,方便后续操作。

代码

#include 
#include 
#define MAX 110
int main(){
	int cnt, i;
	char *pinput, *pwords;
	// input,find,replace 分别接收三行数据
	// words 以二维数组形式存放 input,每一行为一个单词 
	char input[MAX], words[MAX][MAX], find[MAX], replace[MAX];
	while (gets(input)){
		gets(find);
		gets(replace);
		// 将 input 中的数据放入 words 
		// cnt 用来统计 input 中单词数量
		cnt = 0;
		pinput = input;
		pwords = &words[0][0];
		while (*pinput){
			while (*pinput != ' ' && *pinput != '\0'){
				*pwords = *pinput;
				++pinput;
				++pwords;
			}
			*pwords = '\0';
			pwords = &words[++cnt][0];
			if (*pinput == ' ')
				++pinput;
		} 
		// 遍历 words 中的单词,进行查找替换 
		for (i = 0; i < cnt; ++i)
			if (!strcmp(words[i], find))
				strcpy(words[i], replace);
		// 根据 words 输出结果
		// flag 标志是否已输出第一个单词
		int flag = 0; 
		for (i = 0; i < cnt; ++i){
			if (flag)
				putchar(' ');
			printf("%s", words[i]);
			flag = 1; 
		} 
		putchar('\n'); 
	}
	return 0;
} 

你可能感兴趣的:(算法笔记)