2011-10-19 232 views
1

我必须编写一个函数C,它删除字符串中与输入字符相同的所有字符。 例如,用户输入字符串“aabbccaabbcc”和char'b',那么结果应该是“aaccaacc”。 我不能在我的代码找到的错误(功能不会删除应该删除所有字符):C删除字符串中的字符

void removechar(char str[], char t) 
{ 
    int i,j; 
    for(i=0; i<strlen(str); i++) 
    { 
    if (str[i]==t) 
     for (j=i; j<strlen(str); j++) 
     { 
     str[j]=str[j+1]; 
     } 
    } 
} 

回答

1

以这种方式不能从字符串中删除字符。 你想要做的是创建一个新的字符串(char *数组)和复制字符,除非该字符是T.在这种情况下继续下一个字符。

+1

的可变交叉这是为了将每个字符从字符串复制到自身,除非字符是要删除的字符。与使用临时字符串相比,使用更少的复制,循环和内存。 –

1

因为这看起来像一个课外练习,我只给你一个提示。想想当你有两个相邻的角色要移除时,你的字符串和循环计数器会发生什么。

2

当你删除一个字符(比如index = 5)时,该索引现在对应的字符是index = 6;但你的循环增量索引= 6,所以你跳过索引= 5新的字符。
你最好复制到一个新的字符串有效的字符,这很容易。
或者你可以尝试

void removechar(char str[], char t) 
{ 
    int i,j; 
    i = 0; 
    while(i<strlen(str)) 
    { 
     if (str[i]==t) 
     { 
      for (j=i; j<strlen(str); j++) 
       str[j]=str[j+1]; 
     } else i++; 
    } 
} 
1

这里是我的功能

const char *removeCommaFromString(char *str){ 
int i,j; 
i = 0; 
while(i<strlen(str)) 
{ 
    if (str[i]==',') 
    { 
     for (j=i; j<strlen(str); j++) 
      str[j]=str[j+1]; 
    } 
    else i++; 
} 
return str; 

}

使用

char sam[]= {"Samir, Samedov"}; 
char * sss; 
sss = removeComma(sam); 

printf("\n%s",sam); 

输出:Samir Samedov