• ベストアンサー

C言語、単語ごとに改行したい

英文を入力させ、その英文から単語を抜き取るプログラム たとえば、 入力文字:This is a book. 単語: This is a book スペース、カンマ、コロンの時に改行という感じで、このようなプログラムを作りたいのですが、どのような感じに書けばいいでしょうか? わかる方、よろしくおねがいします

質問者が選んだベストアンサー

  • ベストアンサー
  • ency
  • ベストアンサー率39% (93/238)
回答No.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

bumplove777
質問者

お礼

ありがとうございます、ホントに助かりました^^

その他の回答 (6)

  • ymasan
  • ベストアンサー率45% (16/35)
回答No.6

ANo5.さん 今回質問者さんは、デリミタが複数(空白、カンマ、コロン)あるとおっしゃっているので、strokではその要求を満たせないと思います。

noname#23393
noname#23393
回答No.5

自分で一文字ずつ見るコード書かなくても strtok で一発では? 参考URLにサンプルもあります。

参考URL:
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

英文の表記ルールだと、カンマの後には空白一つ、ピリオドの後には空白二つを置くというのが あるはずですが、その辺の扱いはどうなりますか? たとえば hello, world と入力した場合の結果は hello (空行) world のようになってもOKですか? それと、ダブルクォートやシングルクォートで囲まれているのは 空白を含んでいても一つの語として見なさなくても良いのでしょうか?

  • ymasan
  • ベストアンサー率45% (16/35)
回答No.3

区切り文字(デリミタ)が複数なんですね、 ただ単に表示するだけなら、 #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)
回答No.2

愚直に書くと 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)
回答No.1

★アルゴリズム ・文字列を左から検査して、スペース、カンマ、コロンの文字の時だけ  改行コード(\n)を出力すればよい。 ・スペース、カンマ、コロン以外の文字は普通に putchar で出力します。 ●サンプル void MyPrint( const char *string ) ←入力した文字列を指定 {  while ( *string != '\0' ){   if ( strchr(" ,:",*string) != NULL ){    putchar( '\n' );   }   else{    putchar( *string );   }   string++;  } } ・以上。おわり。

関連するQ&A

専門家に質問してみよう