2

スペースを含む文字列を入力として取り、スペースを NULL 文字 '\0' に置き換えます。今文字列を印刷すると、以前は最初のスペースだった最初の NULL 文字までの部分しか期待できませんが、元の文字列を取得しています。

ここにコードがあります-

#include<stdio.h>

int main(){
    char a[1000];
    int length, i = 0;
    length = 0;
    scanf("%[^\n]s", a); 
    while(a[i]!='\0')
            i++;
    length = i;
    printf("Length:%d\n", length);
    printf("Before:%s\n", a); 
    for(i=0;i<length;i++){
            if(a[i] == " ")
                    a[i] = '\0';
    }   
    printf("After:%s\n", a); 
    return 0;
}

これの何が問題なのですか?

4

1 に答える 1

8

あなたのコードは間違っています。

for(i=0;i<length;i++){
        if(a[i] == " ")
                a[i] = '\0';
}   

比較では、文字とポインタを比較しようとしています( ""->これは文字列へのポインタになります。この場合、文字列にはスペースしかありません)。これは次の置換で修正できます。

for(i=0;i<length;i++){
        if(a[i] == ' ')
                a[i] = '\0';
}   

または、スペースとは別に、タブのような他の空白を使用できるため、この方法で行う方がよいでしょう。(ctype.hも含めてください)

for(i=0;i<length;i++){
           if(isspace(a[i]))
                a[i] = '\0';
}
于 2012-10-13T07:37:49.950 に答える