C言語関係掲示板

過去ログ

No.1303 gets()で読み込んだ文字列を空白ごとに逆から表示したい

[戻る] [ホームページ]
No.17499

空白ごとに逆に表示したい。
投稿者---tomohisa(2004/10/26 15:03:04)


gets()で読み込んだ文字列を空白ごとに逆から表示したいのですが、プログラムの書き方が分からなくて困っています。
例えば、使用者が
his name is tomohisa
と入力した場合、
tomohisa is name hisと出したいのです。
ヒントだけでもいいのでお願いします。


No.17500

Re:空白ごとに逆に表示したい。
投稿者---NykR(2004/10/26 15:16:25)


>ヒントだけでもいいのでお願いします。

sscanf と 再帰


No.17501

Re:空白ごとに逆に表示したい。
投稿者---Hermit(2004/10/26 15:22:02)


簡単に考えると、

strtok で文字列を切り分け文字で切り分けて、最後から出力し、
間に切り分け文字をかませる! でいいのではないかと思いますが。

切り分け文字(スペース)が、二つ以上続くときは考慮してません。


No.17502

Re:空白ごとに逆に表示したい。
投稿者---もぐりん(2004/10/26 15:23:57)


1)getsで取得した文字列をstrtokを使用して単語に切り分ける。
2)切り分けた単語を逆から順に並べ替えて出力する。



No.17503

Re:空白ごとに逆に表示したい。
投稿者---tomohisa(2004/10/26 16:44:47)




素早い解答ありがとうございます。
>1)getsで取得した文字列をstrtokを使用して単語に切り分ける。
に関しては、
#define SIZE 256
int main()
{
char str[SIZE];
char *tokenPtr;
gets( str );
strcpy(strc, str);
tokenPtr = strtok( str, " " );

return 0;
}
でできてると思うのですが、
>2)切り分けた単語を逆から順に並べ替えて出力する。
が、よくわかりません。
もう少し詳しく教えていただけませんか?




No.17504

Re:空白ごとに逆に表示したい。
投稿者---επιστημη(2004/10/26 16:48:49)


>
>
>>1)getsで取得した文字列をstrtokを使用して単語に切り分ける。
>に関しては、
>...
>でできてると思うのですが、

では、ひとつづつ表示してみてください。



No.17506

Re:空白ごとに逆に表示したい。
投稿者---tomohisa(2004/10/26 16:52:43)


>>
>>
>>>1)getsで取得した文字列をstrtokを使用して単語に切り分ける。
>>に関しては、
>>...
>>でできてると思うのですが、
>
>では、ひとつづつ表示してみてください。

while ( tokenPtr != NULL ) {
printf( "%s\n", tokenPtr );
tokenPtr = strtok( NULL, " " );
}
ですよね?



No.17509

Re:空白ごとに逆に表示したい。
投稿者---かずま(2004/10/26 17:00:33)


なぜ【掲示板ご利用上の注意】にしたがってプログラムを投稿しないのですか?

と小言を言うだけではなんなので、strtok を使わないプログラムを示します。
#include <stdio.h>

#define P(op)  if (i < 0) break; \
               for (j = i; --i >= 0 && buf[i] op ' '; ) ; \
               printf("%.*s", j - i, buf + i + 1)

int main(void)
{
    char buf[256];  int i, j;

    if (gets(buf)) {
        for (i = 0; buf[i]; i++) ;
        for (;;) { P(!=); P(==); }
        puts("");
    }
    return 0;
}



No.17510

Re:空白ごとに逆に表示したい。
投稿者---επιστημη(2004/10/26 17:01:48)


>while ( tokenPtr != NULL ) {
> printf( "%s\n", tokenPtr );
> tokenPtr = strtok( NULL, " " );
> }
>ですよね?

そのtokenPtrを配列に代入します。
その配列の各要素をオシリから表示すればいい。