функция void языка c, возвращающая тот же результат

#c #void

#c #void

Вопрос:

 #include <stdio.h>
#include <stdlib.h>

void squeeze(char s[], int c);

int main(){

    char x[]="cats";
    int y =10;

    squeeze(x,y);

    printf("%s %dn", x, y);
    return 0;
}


void squeeze (char s[], int c){
    int i,j;
    for(i = j=0; s[i]!=''; i  )
        if(s[i] !=c)
            s[j  ]=s[i];
    s[j] = '';
}  
  

Эта функция «удаляет все c из s». Я не знаю, как заставить это работать. Вывод этой функции cats, 10 : ничего не меняется. Я делаю что-то не так здесь?

Комментарии:

1. Поскольку строка cats не содержит символа 10 , вы не должны ожидать изменений, не так ли? В наборах кода, полученных из ASCII, символом 10 является 'n' символ новой строки. Создайте строку char z[] = "Onenlinenornmanyn"; и вызовите squeeze(z, 'n'); , печатая z до и после.

2. понял. спасибо, вы забыли о ascii.

Ответ №1:

Функция работает корректно.

Проблема в том, что строка cats не содержит символов 10 , поэтому вам не следует ожидать изменений. В наборах кодов, полученных из ASCII, символом 10 является 'n' символ новой строки. Создайте строку char z[] = "Onenlinenornmanyn"; и вызовите sqeeze(z, 'n'); , печатая z до и после:

 #include <stdio.h>

void squeeze(char s[], int c);

int main(void)
{
    char x[] = "cats";
    int y = 10;

    printf("before: [%s] %dn", x, y);
    squeeze(x, y);
    printf("after:  [%s] %dn", x, y);

    printf("%s %dn", x, y);
    char z[] = "Onenlinenornmanyn";
    printf("before: [%s]n", z);
    squeeze(z, 'n');

    printf("after:  [%s]n", z);
    return 0;
}

void squeeze(char s[], int c)
{
    int i, j;
    for (i = j = 0; s[i] != ''; i  )
        if (s[i] != c)
            s[j  ] = s[i];

    s[j] = '';
}
  

Вывод из этого:

 before: [cats] 10
after:  [cats] 10
cats 10
before: [One
line
or
many
]
after:  [Onelineormany]