如何在不使用任何库的情况下从c中的字符串中删除某个字符 功能?我写的函数似乎有一个运行时错误,我无法弄清楚为什么。
void remove_char(char* s,int index)
{
while(s[index+1] != 0)
{
s[index] = s[index + 1];
index++;
}
s[index] = 0;
}
我还想知道是否有办法删除复杂度为1的字符?
答案 0 :(得分:0)
如果没有看到你如何调用你的函数,就很难知道确切的失败模式。用char string[] = "this is a string";
调用它,它运行正常。但正如评论所示,其他一些形式的输入字符串可能会导致问题。
我使用了以下实现,没有任何问题。它会删除所有出现的指定字符:
int RemoveCharFromString(char *orig, char c, char *newStr)
{
if(!orig) return -1;
if(!newStr) return -1;
int i=0, j=0;
while (*(orig+i) != '\0')
{
if (*(orig+i) != c)
{
*(newStr+j) = *(orig+i);
j++;
i++;
}
else i++;
}
*(newStr+j) = '\0';
return 0;
}
或者,按照您的要求,这个删除指定索引处的字符:
int RemoveCharFromStringByIndex(char *orig, int index, char *newStr)
{
if(!orig) return -1;
if(!newStr) return -1;
int i=0, j=0;
while (*(orig+i) != '\0')
{
if (i != index)
{
*(newStr+j) = *(orig+i);
j++;
i++;
}
else i++;
}
*(newStr+j) = '\0';
return 0;
}
注意,在此实现中,newStr
由调用者创建,并且必须包含足以包含结果的空间。
您当然可以以任何方式调整这些。改进原型是将原型改为:
char * RemoveCharFromString(char *orig, char c);
或者
char * RemoveCharFromStringByIndex(char *orig, int index)
但如果您愿意,那将是您可以做的事情。
答案 1 :(得分:0)
我总是喜欢这样从字符串中删除特定字符:
NULL
如果目标指针不等于被跳过的字符,则仅递增目标指针。有时您会直接使用传递的参数src和dst看到这一点,但是当某些编译器使用单独的指针生成更高效的代码时会回来。 " const"只是允许您将常量字符串作为源传递,而不会产生编译器错误。