[英]C programming : Strings
我的问题是:输入字符串,然后替换我们要更改的单词
例如:输入:我爱可乐
字:可乐
替换:百事可乐
结果:我爱百事可乐
但是,当我运行此代码时,它崩溃了。 你能帮我看看这个错误吗?
#include <stdio.h>
#include<string.h>
char replace(char s1[100],char s2[100],char s3[100])
{
int k,i,j;
for(i=0;i<strlen(s1);i++)
for(j=0;j<strlen(s2);j++)
for(k=0;k<strlen(s3);k++)
{
if(s1[i]==s2[j])
{
s1[i]=s3[k];
}
}
return s3;
}
int main()
{
char s1[100],s2[100],s3[100];
printf("input string: ");gets(s1);
printf("Find string: ");gets(s2);
printf("Replace: ");gets(s3);
printf("Result: %s",replace(s1,s2,s3));
return 0;
}
我建议您使用第4个缓冲区来存储生成的结果。 如果要替换的单词和新单词的长度不同,则将无法在本地替换。
另外,您正在分别比较字符。 仅仅因为发现c
并不自动意味着发现了coke
,应将其替换。 在替换任何内容之前,您必须检查整个单词是否存在。 使用strstr()
在字符串中找到子字符串。
另外,您的函数返回一个char
,它应该返回一个字符串( char *
)。
此外,在线上有很多示例,介绍如何编写函数来替换字符串中的单词,因此请不要多余。 谷歌一下。
C中的字符串以null终止,例如“ i love coke \\ 0”。 字符串长度不包含空终止符。 因此,您要用“百事可乐”中的“ i”覆盖“ e”之后的空终止符。
一个快速的技巧是将s1,s2和s3设置为0,以检查是否以null终止字符串是否有帮助。
您的方法不太有效。 您需要做的是在输入字符串中搜索要替换的单词。 因此,在开始切换之前,您需要搜索要替换的整个单词。
找到该单词后,您需要在该位置放上新单词,然后再次开始搜索该单词,直到完成输入字符串。
因此,对于伪代码:
for i in input //for every letter
if input[i] != lookfor[0]
results[i] put input[i] into new "results" array
else // We might have found it.
for j in lookfor // Go through coke, one at a time
if input[i+j] != lookfor[j] "c,o,k,e"
break; //You didn;t find coke, just "c" or "co" or "cok"
// If you got all the way through, you found coke.
//So now you have to switch that out for the new that in the result
results[i] = "pepsi" //Just be careful here, because this has a different index than i, because pespi's length != coke's length
那有意义吗?
首先,您的replace
函数将返回char
而不是char*
。 您还可以将函数的返回类型定义为void
并可以在函数内字符串操作后使其返回char*
buffer(in / out)参数。 此外,您可以使用strtok()
, strcmp()
和strstr()
预定义的string.h
函数来完成任何类型的字符串操作。
签出以获取有关标准字符串操作函数的信息: 字符串操作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.