アプリ版:「スタンプのみでお礼する」機能のリリースについて

英文を入力させ、その英文から単語を抜き取るプログラム

たとえば、
入力文字:This is a book.

単語:
This
is
a
book

スペース、カンマ、コロンの時に改行という感じで、このようなプログラムを作りたいのですが、どのような感じに書けばいいでしょうか?

わかる方、よろしくおねがいします

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/14 17:51

ANo5.さん



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

自分で一文字ずつ見るコード書かなくても strtok で一発では?


参考URLにサンプルもあります。

参考URL:http://www9.plala.or.jp/sgwr-t/lib/strtok.html
    • good
    • 0

英文の表記ルールだと、カンマの後には空白一つ、ピリオドの後には空白二つを置くというのが


あるはずですが、その辺の扱いはどうなりますか?

たとえば hello, world と入力した場合の結果は
hello
(空行)
world
のようになってもOKですか?

それと、ダブルクォートやシングルクォートで囲まれているのは
空白を含んでいても一つの語として見なさなくても良いのでしょうか?
    • good
    • 0

区切り文字(デリミタ)が複数なんですね、


ただ単に表示するだけなら、

#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;
}

でどうでしょう?(^^
    • good
    • 0

愚直に書くと



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);
}
}

のような感じではないでしょうか。
「ある引数の文字が、別の引数の文字列の中のいずれかに当てはまる場合場合」という判定を行う関数があったような気もしますが、失念してしまいました。

参考までにどうぞ。
    • good
    • 0

★アルゴリズム


・文字列を左から検査して、スペース、カンマ、コロンの文字の時だけ
 改行コード(\n)を出力すればよい。
・スペース、カンマ、コロン以外の文字は普通に putchar で出力します。

●サンプル
void MyPrint( const char *string ) ←入力した文字列を指定
{
 while ( *string != '\0' ){
  if ( strchr(" ,:",*string) != NULL ){
   putchar( '\n' );
  }
  else{
   putchar( *string );
  }
  string++;
 }
}

・以上。おわり。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!