C 删除字符串中的重复项。我错过了什么?
下面是我尝试删除字符串重复项的过程,我有两个问题:C 删除字符串中的重复项。我错过了什么?,c,string,C,String,下面是我尝试删除字符串重复项的过程,我有两个问题: void removeDuplicates(char *original_string) { if(original_string == NULL) { return; } int len = strlen(original_string); if (len < 2) { return; } int tail = 1; int i; for
void removeDuplicates(char *original_string)
{
if(original_string == NULL) {
return;
}
int len = strlen(original_string);
if (len < 2) {
return;
}
int tail = 1;
int i;
for (i = 1; i < len; i++) {
int j;
for (j=0; j < tail; j++) {
if (original_string[i] == original_string[j]) {
break;
}
}
if (j == tail) {
original_string[tail] = original_string[i];
++tail;
}
}
}
我没有错。但如果我用:
char duplicated[] = "aba";
removeDuplicates(duplicated);
char *duplicated = "aba";
removeDuplicates(duplicated);
我在运行时收到一个总线错误:10
。“…”
创建一个常量内存块来保存字符串。您不能修改它
因此,在常量字符串上调用时,修改原始字符串[tail]是未定义的行为。
“…”
会创建一个包含字符串的常量内存块。char duplicated[] = "aba";
您不能修改它
因此,在常量字符串上调用时,修改原始字符串[tail]是未定义的行为
char duplicated[] = "aba";
创建char
s的数组,该数组可写
char *duplicated = "aba";
创建字符串文字(不可修改),然后将变量duplicated
分配给指向该字符串文字的指针。由于函数尝试就地修改字符串,因此在尝试写入字符串文字时会调用未定义的行为,从而导致崩溃
创建char
s的数组,该数组可写
char *duplicated = "aba";
创建字符串文字(不可修改),然后将变量
duplicated
分配给指向该字符串文字的指针。由于函数尝试就地修改字符串,因此在尝试写入字符串文字时会调用未定义的行为,从而导致崩溃。字符串文字在C中是不可修改的。这是未定义的行为
因此,duplicated
必须是本地数组:
或者一定是这样
char duplicated[] = "aba";
而不是
char *duplicated = "aba";
字符串文字在C中是不可修改的。它是未定义的行为 因此,
duplicated
必须是本地数组:
或者一定是这样
char duplicated[] = "aba";
而不是
char *duplicated = "aba";
没有任何东西被移除 原始字符串[tail]=原始字符串[i]
这不是删除任何内容,而是替换任何内容 原始字符串[tail]=原始字符串[i]
这并不是删除任何内容,而是替换原始字符串[tail]
本身并不是未定义的行为。否则,您将无法以任何(有用的)方式使用字符串文字:)谢谢您的提问。实际上,我的问题还包括为什么我的方法在删除重复字符时不起作用。我看不出发生了什么。原始字符串[tail]
本身并不是未定义的行为。否则,您将无法以任何(有用的)方式使用字符串文字:)谢谢您的提问。实际上,我的问题还包括为什么我的方法在删除重复字符时不起作用。我看不出发生了什么。我的问题可能重复,不仅仅是关于错误,还有为什么函数不工作。我在你的问题中没有看到任何这样的提及。你说当我做第一个的时候,我没有得到错误和第二个的错误。你还没说过这个系统是否有效。你希望我们编译和验证功能吗?你看不到吗?第一:我做错了什么,我没有看到?我在一本书中发现了这个例子,我相信它是有道理的。为什么不删除重复的字符?如果你不想,我不希望你做任何事。我不明白为什么我的程序不起作用,我请求帮助。没有人回答我现在说的话,因为你的问题似乎从来没有暗示过这个函数本身。如果是这样的话,你必须用它来编辑你的问题。我的问题的可能重复之处不仅在于错误,还在于为什么函数不起作用。我在你的问题中没有看到任何这样的提及。你说当我做第一个的时候,我没有得到错误和第二个的错误。你还没说过这个系统是否有效。你希望我们编译和验证功能吗?你看不到吗?第一:我做错了什么,我没有看到?我在一本书中发现了这个例子,我相信它是有道理的。为什么不删除重复的字符?如果你不想,我不希望你做任何事。我不明白为什么我的程序不起作用,我请求帮助。没有人回答我现在说的话,因为你的问题似乎从来没有暗示过这个函数本身。如果是这样的话,你必须用它来编辑你的问题,但即使把它声明为char-duplicated[]=“aba”;我没有看到重复的字符被删除。函数中的错误在哪里?@HommerSmith现在这是另一个问题。你试过调试它吗?另外,您希望原始_字符串[i]代码>要做什么?它本身什么也不做。这是一个没有副作用的表达式语句,其值立即被丢弃——本质上是一个不可操作的语句。这是在我最初的问题中。。。我问了两个问题,第一个为什么不起作用,第二个,为什么我在声明字符串本身时会出现错误……但甚至将其声明为char duplicated[]=“aba”;我没有看到重复的字符被删除。函数中的错误在哪里?@HommerSmith现在这是另一个问题。你试过调试它吗?另外,您希望原始_字符串[i]代码>要做什么?它本身什么也不做。这是一个没有副作用的表达式语句,其值立即被丢弃——本质上是一个不可操作的语句。这是在我最初的问题中。。。我问了两个问题,第一个为什么不起作用,第二个,为什么我在声明字符串本身时会出错。。。