我正在尝试创建function
removes
指定的character from a string
。
我只使用代码完成了一半,因为当我试图替换要删除的字符时,我遇到了困难。我刚刚意识到我不能在数组的元素中加入“无”,所以我的计划就被破坏了。
我认为我必须遍历整个字符串,当我找到要删除的字符时,我必须通过将“坏”字符前面的所有元素向前移动一步来删除它。这是对的吗?
#include <stdio.h>
#include <string.h>
void del(char string[], char charToDel)
{
int index = 0;
while(string[index] != '\0')
{
if(string[index] == charToDel){
string[index] = string[index+1];
}
index++;
}
printf("%s", string);
}
int main(void)
{
char string[] = "Hello world";
del(string, 'l');
return 0;
}
我想制作这个节目without pointers
。只是简单的简单代码。
我添加了另一个while循环,它将循环中的每个字符向左移动,但由于输出只是纯空白,所以它似乎不起作用。
int index = 0;
while(string[index] != '\0')
{
if(string[index] == charToDel)
{
while(string[index] != '\0')
{
string[index] = string[index+1];
}
}
index++;
}
printf("%s", string);
}
Johathan Leffler的方法?
char newString[100];
int index = 0;
int i = 0;
while(string[index] != '\0')
{
if(string[index] != charToDel)
{
newString[i] = string[index];
index++;
i++;
}
i++;
index++;
}
printf("%s", newString);
}
这给了我很多奇怪的角色......
答案 0 :(得分:4)
char const *in = string;
char *out = string;
while (*in) {
if (*in != charToDel)
*out++ = *in;
++in;
}
*out = '\0';
或没有指针
size_t in = 0;
size_t out = 0;
while (string[in]) {
if (string[in] != charToDel)
string[out++] = string[in];
++in;
}
string[out] = '\0';
答案 1 :(得分:0)
问题在于,当您将string[index+1]
分配给string[index]
时,字符串中的下一个l
取代了前一个index
,1
增加到下一个值l
void del(char string[], char charToDel)
{
int index = 0, i = 0;
while(string[index] != '\0')
{
if(string[index] != charToDel){
string[i++] = string[index];
}
index++;
}
string[i] = '\0';
printf("%s", string);
}
,您的函数不会删除此{{1}}。你应该修理那个。
正如Jonathan Leffler和Gabson所建议的那样;你可以通过将字符串复制到自身来做到;
{{1}}