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