1
目的:入力する文字列の数を取得し、文字列を読み取って文字列を反転して文字列を出力します。fgetsを使用して文字列を読み取ると、2番目の文字列の出力が得られませんでした。
ba
次の文字列
#include <stdio.h> int main() { int num_tc, index_tc, char_idx, str_len = 0; char S[31]; scanf("%d\n", &num_tc); for (index_tc = 1; index_tc <= num_tc; index_tc++) { fgets(S, sizeof(S), stdin); /* To compute the string length */ for (char_idx = 0; S[char_idx] != NULL; char_idx++) str_len++; /* Reverse string S */ for (char_idx = 0; char_idx < str_len/2; char_idx++) { S[char_idx] ^= S[str_len - char_idx - 1]; S[str_len - char_idx - 1] ^= S[char_idx]; S[char_idx] ^= S[str_len - char_idx - 1]; } puts(S); } return 0; }
プログラムへの入力
2<\n> ab<\n> aba<\n>
出力が親切に2番目の文字列は、文字列の反転のために取られていない理由を私は知っているように進みます。
- 私は、文字列の反転ロジックを削除した場合、私はあなたがループの本体に
0
にstr_len
をリセットしません両方の文字列が出力
:ここ
は、個々の単語を逆に
scanf()
を使用して簡略化し、ある解答スコア下のグレーのチェックマークをクリックして受け入れられるよう、あなたはこの答えをマークすることができますか? – chqrlie1)S [strcspn(S、 "\ n")] = '\ 0';私はこのプログラムで助けになるかどうか分からない。 2)私はscanfで同じプログラムを書くことができますか?(私は[link](http://stackoverflow.com/questions/6282198/reading-string-from-input-with-space-character)で試しました)3)このscanf( "%d \ n"、&num_tc)を置くには良い方法がありますか? –
あなたはラインの内容を逆にすることになっています。ラインフィードを前に置いて、 'puts()'で別の改行を追加するのは不適切です。改行を取り除くことは、適切なセマンティクスのようです。提案された方法は、すべての場合に有効です。ループ内で '\ 0 'と'' \ n ''の両方をテストし、 'S [str_len]'に ''\ 0' 'を強制するなど、他の方法を想像することもできます。 – chqrlie