“decide”或“phhhonne”->“phone”。 我有一个使控制台崩溃的函数,但我无法发现错误: char* -6ren">
gpt4 book ai didi

c 函数将 "fffoootoo"转换为 "foto"(省略以下重复字符)

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:33 24 4
gpt4 key购买 nike

任务是从 char 数组中删除以下重复的字符,例如“deeeciddeee”->“decide”或“phhhonne”->“phone”。

我有一个使控制台崩溃的函数,但我无法发现错误:

char* my_unique(char *first, char *last) {
char* ret=first;
for(int i=0; first+i!=last; i++){
if(first[i]==first[i+1]){
for(int j=i; first+j!=last; j++)
first[j]=first[j+1];
last--;
}
}
return ret;
}

它是这样调用的:

char* a="oooat";
a=my_unique(a, a+strlen(a));
cout<<a;

请帮帮我!

最佳答案

除了一个小错误(你应该在 last--; 之后添加 i--; 行,因为你要删除位置 i 的字符,所以呢i+1 处的字符成为位置 i 处的新字符。如果你不减少 i,它会增加并且你跳过一个字符)代码运行得很好如果它是用

调用
const char* b = "oooat";
char* a = new char[strlen(b) + 1];
for (size_t c = 0; c < strlen(a) + 1; c++) { a[c] = b[c]; }
a = my_unique(a, a + strlen(a));
cout << a;
delete[] a;

请注意,我使用了字符串的可编辑副本,因为文字本身是 const char* 类型,因此根本无法更改。正如我所说,这工作得很好并且打印出“燕麦”,正如预期的那样,没有任何崩溃。所以您的问题可能是您尝试编辑 const 字符串文字?在这种情况下,您可能会像我一样考虑复制它,或者使用 std::string(如果您使用 C++ 编写代码)。

关于c 函数将 "fffoootoo"转换为 "foto"(省略以下重复字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48919256/

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