2017-02-09 8 views
1

文字列を空白なしで出力したいです。私は以下のコードを書いたが、私のif文はchar文字列内のスペースを検出していないようだし、そうでない。文字列のスペースを確認するには?

私の問題は私のif文にあると仮定しますが、修正方法はわかりません。

int main (void) 
{ 
    char s[50]; 

    printf("Enter string:"); 
    fgets(s,50,stdin); 

    for(int i = 0; i < strlen(s); i++){ 
    if(&s[i] != " "){ 
    printf("%c\n", s[i]); 
    } 
    } 

    return 0; 
} 

出力:

Enter string:xales was here 
x 
a 
l 
e 
s 

w 
a 
s 

h 
e 
r 
e 
+2

if(&s [i]!= ""){'を' if(s [i]!= ''){'と置き換えてください。 – yeputons

+0

'if(&s [i]!=" "){' charのアドレスを文字列リテラルと比較しますか?動作しますが、決して真実ではありません... http://stackoverflow.com/questions/3683602/single-quotes-vs-double-quotes-in-c-or-c – John3136

+0

@yeputonsを参照してください。答えilそれを取る!ありがとう! – TheXales

答えて

0

注意すべき重要なことは、二重引用符で囲まれた文字は実際の文字列ではなく、char型であるということです。この値は、プログラムのメモリ内の場所(スタック上の値ではありません)に2バイトの長さ(1つはスペース、1つは\0)のメモリアドレスを保持します。つまり、#1のことです:"'に変更すると、値で比較するためにスタック上に1つのcharがあります。

数字の2は、そこに記号&を使用することによって、値の代わりに文字列のi番目のインデックスのアドレスと比較しようとしています。 &を削除するだけです。

0

はい、あなたは正しいです。 if条件は常に真であるため、文字列全体をそのまま出力することになります。
あなたの場合条件:ここでは if(&s[i] != ' ') print s [i];

"&" のアドレスを表します。だからあなたのチェックブロックでは、次のようになります。

` if(addressof(s[i] != ' ') print s[i]; ` 

ここで、アドレスはスペースではないので、ifブロックは常に真です。あなたはcharecterが賢明比較しているとして、あなたが「文字列である」、ということを理解する必要があり、また、 if(s[i] != ' ') print s [i];

と文字のために、あなたは、単一の使用する必要があります。 しかし、あなたはSをチェックするようにスペースなしで印刷するには、値をチェック引用符 ''。

関連する問題