问题描述
#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 %d\n",x,y);
return 0;
}
void squeeze (char s[],int c){
int i,j;
for(i = j=0; s[i]!='\0'; i++)
if(s[i] !=c)
s[j++]=s[i];
s[j] = '\0';
}
此功能是“从s中删除所有c”。我不怎么使它工作。该函数的输出为cats,10
,没有任何变化。我在这里做错什么了吗?
解决方法
该功能正常工作。
问题在于字符串cats
不包含字符10
,因此您不应期望更改。在从ASCII派生的代码集中,字符10
是换行符'\n'
字符。创建一个字符串char z[] = "One\nline\nor\nmany\n";
并调用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] %d\n",x,y);
squeeze(x,y);
printf("after: [%s] %d\n",y);
printf("%s %d\n",y);
char z[] = "One\nline\nor\nmany\n";
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] != '\0'; i++)
if (s[i] != c)
s[j++] = s[i];
s[j] = '\0';
}
输出是:
before: [cats] 10
after: [cats] 10
cats 10
before: [One
line
or
many
]
after: [Onelineormany]