c - сравнение строк - PullRequest
       1

c - сравнение строк

0 голосов
/ 04 сентября 2011

Приведенная ниже функция должна заменять символы, найденные в 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 никогда не изменяется.Может кто-нибудь объяснить, что происходит?

Ответы [ 4 ]

6 голосов
/ 04 сентября 2011

В качестве первого параметра вы передаете строковый литерал (который фактически является константой), а затем пытаетесь изменить его в функции.

Сделайте это вместо:

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

    blank(s, "bde");

    return 0;
}
3 голосов
/ 04 сентября 2011

Я думаю, вам нужно перебрать символы в 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);
}
1 голос
/ 04 сентября 2011
/* 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);
    }
}
0 голосов
/ 04 сентября 2011

разве вы не хотите j ++ внутри if, а не else?Я думал, что вы прогрессируете, когда вы найдете чар

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...