繁体   English   中英

C编程:字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM