【发布时间】:2021-03-14 21:55:42
【问题描述】:
我必须将字符串中的所有“a”字符替换为“aaa”。
所以,我正在尝试做的事情。如果输入是water,则输出必须是这样的:waaater。
我试过这个:
#include <iostream>
#include <string.h>
using namespace std;
int main ()
{
char s[100], t[100];
int i;
cout << "The string is: " << endl;
cin.get (s, 100);
strcpy (t, s);
for (i = 0; i < strlen (s); i++)
if (s[i] == 'a')
strcat (strcpy (s + i, "aa"), t + i);
cout << "The modified string is: " << endl;
cout << s;
}
但输出是Segmentation fault (core dumped)。
我不知道出了什么问题,也不知道在哪里改。
【问题讨论】:
-
有什么原因不能使用
std::string?? -
@mathematician1975 如果我使用
std::string,它会起作用吗? -
如果您真的想要,您可以通过使用读取器和写入器来处理本机数组。 除非 char 是
a,在这种情况下,它会写入 3 次,每次读取后,写入目标缓冲区的写入器会前进一次 char。完成后一定要终止目标字符串,当然还有限制检查。 -
你做错了什么,每次循环你检查
s的下一个字母,如果你找到a你再插入2个a到s但是然后s中的下一个字母是您刚刚插入的字母,因此您再插入 2 个,然后再插入 2 个……直到 s 中的空间用完。要修复它,每次插入s时,您都需要将s的索引增加 2,这样您就可以超过刚刚插入的内容 - 但您不能将索引增加到t,因为您没有t 在t中插入任何内容。这意味着您需要两个索引:一个用于s,一个用于t:onlinegdb.com/r1Nuxzn7u -
如果您想了解如何使用 std::string 进行操作,请参阅 stackoverflow.com/questions/1494399/… 或 stackoverflow.com/questions/20406744/…