5

私はchar foo[SIZE]; //(string)

%s(正しい入力のように)正しくprintfs入力しましたが、小文字に設定したいと考えています。なので使ってみた

 if (isupper(*foo)) 
   *foo=tolower(*foo); 

つまり、私がするとき:

printf("%s" foo); //I get the same text with upper case

文章は変わらないようです。ありがとうございました。

4

3 に答える 3

5

fooはポインターではないため、ポインターとして使用したくありません。また、使用する前に文字が大文字かどうかを確認する必要はありませんtolower。大文字が小文字に変換され、他の文字は変更されません。おそらく次のようなものが必要です。

for (i=0; foo[i]; i++)
    foo[i] = tolower((unsigned char)foo[i]);

tolower(and toupperisalphaなど) を呼び出すときは、入力を にキャストする必要があることに注意してくださいunsigned char。そうしないと、基本的な英語/ASCII 文字セット以外の多くの (ほとんどの?) 文字が未定義の動作を引き起こすことがよくあります (たとえば、典型的なケースでは、ほとんどのアクセント付き文字が負の数として表示されます)。

余談ですが、文字列を読み取るときは with を使用scanfしたくありません%s-- 常に文字列の長さを次のように指定します: == 20scanf("%19s", foo);と仮定しSIZEます (つまり、 size. または、, fgetslikeを使用することもできます.では、バッファのサイズを指定することにfgets(foo, 20, infile);注意してください。fgetsscanf

于 2013-06-04T03:27:36.507 に答える
3

これを試して

for(i = 0; foo[i]; i++){
  foo[i] = tolower(foo[i]);
}
于 2013-06-04T03:25:53.637 に答える
3

*foo=tolower(*foo); //doing *(foo+i) or foo[i] does not work either

これらのオプションのすべてが意味をなさないため

次のように使用する必要があります。

for(i = 0; foo[i] != '\0'; i++){
    foo[i] = tolower(foo[i]);
}
于 2013-06-04T03:26:09.193 に答える