题目描述
没有盐,做饭只能用酱油。
将所有的salt替换为soy sauce,不管大小写。
输入格式
包含salt的英文语料(每行字符小于1000)
注意:测试输入数据中可能存在字符个数为0的空行(本题推荐采用gets进行数据读入,采用scanf则无法跳过空行)。
输出格式
用soy sauce替换salt后的输出
样例输入
Salt is necessary
Water is not sAlt as salT
as you can make it soy-bean
sauce can be saLt
soy-bean sauce only
bean soy-bean sauce
输出
soy sauce is necessary
Water is not soy sauce as soy sauce
as you can make it soy-bean
sauce can be soy sauce
soy-bean sauce only
bean soy-bean sauce
思路一:
#include<stdio.h>
#include<string.h>
int main()
{
char ch[1000] = { 0 }, b[] = "soy sauce ";
while (gets(ch))
{
int a[1500] = { 0 };
int n = 0;
int len = strlen(ch);
for (int i = 3; i < len; i++)
{
if ((ch[i - 3] == 's' || ch[i - 3] == 'S') && (ch[i - 2] == 'a' || ch[i - 2] == 'A') && (ch[i - 1] == 'l' || ch[i - 1] == 'L') && (ch[i] == 't' || ch[i] == 'T'))
{
for (int k = 0; k < i - 3; k++)
{
a[k] = ch[k];
}
puts(a);
//待补充
}
}
}
return 0;
}
始终错误:
思路:将salt前的字符存入一个数组,将该数组与soy sauce连接,将salt后的字符
再存入该数组,最终输出一个字符
1.salt前字符存入失败,只能存入一个字符
2.连接受影响
3.存入后面字符再输出为乱码
正确答案:
#include<stdio.h>
#include<string.h>
int main()
{
char s[1000];
int i;
while (gets(s))
{
for (i = 0; i < strlen(s); i++) {
if ((s[i] == 's' || s[i] == 'S') && (s[i + 1] == 'a' || s[i + 1] == 'A') && (s[i + 2] == 'l' || s[i + 2] == 'L') && (s[i + 3] == 't' || s[i + 3] == 'T'))
{
printf("soy sauce");
i += 3; //往后越过三个字符
}
else {
printf("%c", s[i]);
}
}
printf("\n");
}
}
总结:循环加选择,输出单个字符,最终结果为整个字符串,就像分而治之
一个一个考虑,最终就能解决所有问题。
Ps:一口气成不了胖子,总要慢慢来