- ベストアンサー
C言語、単語ごとに改行したい
英文を入力させ、その英文から単語を抜き取るプログラム たとえば、 入力文字:This is a book. 単語: This is a book スペース、カンマ、コロンの時に改行という感じで、このようなプログラムを作りたいのですが、どのような感じに書けばいいでしょうか? わかる方、よろしくおねがいします
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
# 横槍ぎみに失礼します。 strtok() でいけますよね。 第2引数にデリミタを列挙すれば良いわけですし。 たとえば、↓こんな感じ↓ ---------------------------------------- char src[] = "This is a pen, and that is a pencil: Great"; char *dest; dest = strtok( src, " ,:" ); while ( dest != NULL ) { puts( dest ); dest = strtok( NULL, " ,:" ); } ---------------------------------------- 【結果】 This is a pen and that is a pencil Great
その他の回答 (6)
- ymasan
- ベストアンサー率45% (16/35)
ANo5.さん 今回質問者さんは、デリミタが複数(空白、カンマ、コロン)あるとおっしゃっているので、strokではその要求を満たせないと思います。
自分で一文字ずつ見るコード書かなくても strtok で一発では? 参考URLにサンプルもあります。
- sakusaker7
- ベストアンサー率62% (800/1280)
英文の表記ルールだと、カンマの後には空白一つ、ピリオドの後には空白二つを置くというのが あるはずですが、その辺の扱いはどうなりますか? たとえば hello, world と入力した場合の結果は hello (空行) world のようになってもOKですか? それと、ダブルクォートやシングルクォートで囲まれているのは 空白を含んでいても一つの語として見なさなくても良いのでしょうか?
- ymasan
- ベストアンサー率45% (16/35)
区切り文字(デリミタ)が複数なんですね、 ただ単に表示するだけなら、 #include <stdio.h> #include <string.h> #define MAX_LENGTH 256 int main(void) { char buf[MAX_LENGTH]; int i; /* bufには既に文字列が入力済みとします */ len = strlen(buf); /* 文字列の長さを取得 */ if (len > MAX_LENGTH) { /* バッファサイズ以上のときエラー */ fprintf(stderr, "エラー:文字列が長すぎます\n"); return 1; } /* 文字列長だけループ */ for (i=0; i<len; i++) { /* 文字列の空白、コンマ、コロンを改行に置換 */ if (buf[i]==' ' || buf[i]==',' || buf[i]==':') buf[i]='\n'; } /* 文字列を表示 */ printf("%s\n", buf); return 0; } でどうでしょう?(^^
- shibamu
- ベストアンサー率50% (10/20)
愚直に書くと char* str = "This is a book"; int i; /* strlenにstring.hのincludeが必要 */ /* 1文字ずつ処理 */ for(i = 0; i < strlen(str); i++){ char ch = str[i]; /* 改行をする場合を判定 */ if(ch == ' ' || ch == ',' || ch == ','){ putchar('\n'); } else{ putchar(ch); } } のような感じではないでしょうか。 「ある引数の文字が、別の引数の文字列の中のいずれかに当てはまる場合場合」という判定を行う関数があったような気もしますが、失念してしまいました。 参考までにどうぞ。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アルゴリズム ・文字列を左から検査して、スペース、カンマ、コロンの文字の時だけ 改行コード(\n)を出力すればよい。 ・スペース、カンマ、コロン以外の文字は普通に putchar で出力します。 ●サンプル void MyPrint( const char *string ) ←入力した文字列を指定 { while ( *string != '\0' ){ if ( strchr(" ,:",*string) != NULL ){ putchar( '\n' ); } else{ putchar( *string ); } string++; } } ・以上。おわり。
お礼
ありがとうございます、ホントに助かりました^^