c - 比较字符串

时间:2011-09-04 10:14:40

标签: c

如果在s中找到toBlank中的字符,则下面的函数应该替换#include <stdio.h> #include <stdlib.h> #include <string.h> /* function blank replaces all characters in the parameter string s * that are present in the parameter string toBlank with space characters. * for example, if s were the string "abcdef" and toBlank the string * "bde", then after calling this function, s would be "a c f" */ void blank(char *s, const char *toBlank){ int i=0, j=0; while (s[i] != '\0'){ if (s[i] == toBlank[j]){ s[i] = ' '; }else{ j++; } i++; } printf("%s", s); } int main(void){ blank("abcdef", "bde"); } 中的字符:

s

问题是,{{1}}永远不会被修改。有人可以解释发生了什么吗?

4 个答案:

答案 0 :(得分:6)

你传递一个字符串文字(实际上是const)作为你的第一个参数,然后你尝试在函数中修改它。

请改为:

int main(void)
{
    char s[] = "abcdef";

    blank(s, "bde");

    return 0;
}

答案 1 :(得分:3)

我认为你需要迭代toBlank中的字符。

void blank(char *s, const char *toBlank)
{
    int i=0, j;
    while (s[i] != '\0')
    {
        j = 0;
        while(toBlank[j] != '\0')
        {
          if (s[i] == toBlank[j])
          {
              s[i] = ' ';
              break;
          }
          else
          {
              ++j;
          }
        }
        ++i;
    }
    printf("%s", s);
}

答案 2 :(得分:1)

/* there are stdlib functions for these kind of things */

#include <stdlib.h>
void blank(char *str, char * wits)
{
size_t pos,len;

for (pos=len=0; str[pos]; pos += len) {
    len = strspn(str+pos, wits);
    if (len) memset(str+pos, ' ', len);
    else len = strcspn(str+pos, wits);
    }
}

答案 3 :(得分:0)

难道你不希望j ++里面的if而不是else吗? 当你找到char

时我觉得你进步了