#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]