gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:08:04 26 4
gpt4 key购买 nike

我一直在开发一个 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 替换为 was。

最佳答案

正如其他人在上面的评论中指出的那样,您的程序存在一些缺陷。

  1. 第一个缺陷是您对 strcat 函数的使用。如果您阅读文档,您就会明白 strcat 将第一个参数视为目标指针,因此期望用户为目标指针分配足够的内存(足以容纳连接的字符串)。在您的情况下,您传递的是一个字符串“”,它只能容纳 1 个字符。这就是您遇到缓冲区溢出或段错误的原因。
  2. 程序中的第二个错误是在使用 strcmp 函数时出现的。当两个字符串相等时,此函数返回 0(由 false 定义,而不是 strbool.h 中的 true 定义)。
  3. 程序中的第三个问题是函数strtok的使用。从第二次调用开始,您需要将 NULL 作为第一个参数传递,以获取指向剩余标记的指针。

因此,首先修复这 3 个错误,然后尝试考虑还需要纠正哪些内容才能获得所需的输出。

关于c - 使用 C 程序替换字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40472948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com