使用C替换字符串中的单词的程序

时间:2016-11-07 19:21:10

标签: c string

我一直致力于一个c程序,它允许用户输入文本行,直到他们在一行上输入短语“The end”。该程序将使用字符串“was”替换每次出现的“is”并计算所做的更改次数。

到目前为止,我已经编写了一些代码但是我对如何使其正常工作有点迷失,因为现在程序正在给我一个缓冲区溢出错误

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main ()
{
    char str[500];// ="- This, a sample string.";
    char * pch;
    char endTerm[5000];

    printf("Enter a string to parse: ");
    scanf("%[^\n]",str);
    strcat(endTerm, str);


    while ( (strcmp(str, "the end")) != 0 || (strcmp(str, "the end.")) != 0 )
    {
            scanf("%[^\n]",str);
             strcat(endTerm, str);
    }



    printf ("Your original string was: %s\n\n",endTerm);
    pch = strtok (endTerm," ,-");


    while (pch != NULL)
    {
        if ((strcmp(pch, "is")) == 0)
        {
            pch = "was";
        }
        else if ((strcmp(pch, "is.")) == 0)
        {
            pch="was.";
        }


        printf ("%s ",pch);
        pch = strtok (NULL, " ,-");
    }

    printf("\n\n");





    return 0;
}

如果用户输入结尾,我可能会弄清楚如何结束程序,但我真的需要帮助更换单词is is。

1 个答案:

答案 0 :(得分:0)

正如其他人在上述评论中指出的那样,您的计划存在一些缺陷。

  1. 第一个缺陷是你使用strcat函数。如果您阅读文档,您将理解strcat将第一个参数视为目标指针,因此希望用户将足够的内存(足以保存连接的字符串)分配给目标指针。在你的情况下,你传递一串&#34; &#34;只能容纳1个字符。这就是你得到缓冲区溢出或分段错误的原因。
  2. 程序中的第二个错误是使用strcmp函数。当两个字符串相等时,此函数返回0(由false定义而不是true中的strbool.h)。
  3. 程序中的第三个问题是使用函数strtok。您需要传递NULL作为第二个调用的第一个参数,以获取指向其余标记的指针。
  4. 首先修复这3个错误,然后尝试考虑需要纠正的其他内容才能获得所需的输出。