• ベストアンサー

ポインタの質問

本見て独学してるのですが演習で答えないところあってわからないところあったので教えてください。 「キーボードから英文を入力してその英文を各単語に分解して単語の先頭番地をchar型のポインタ配列に格納し、その単語を出現順に番号をつけて順に表示するプログラム」 をやろうとしてるのですが単語と単語の間のスペースをどうしたらよいのかとか、単語の先頭の探し方とかがわかりません。 できたらプログラムをプログラムを教えてほしいです。 英文はIt is a pen.としようと思ってます。

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

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.4

ソースの善し悪しは別として、いろいろな人が書いたものを見て考えるのも勉強になると思います。 がんばれぇ~ #include <stdio.h> int main() { int i,key,len,num ; char str[256],*ptr[128] ; num = 0 ; len = 0 ; ptr[0] = str ; do { key = getchar(); str[len] = (char)key ; if ( key == ' ' || key == '.' || key == ',' || key == '!' || key == '?' || key == '"' || key == 0x0a || key == 0x0d ){ str[len] = '\0' ; if ( str+len-ptr[num] ){ num ++ ; } ptr[num] = str+len+1 ; } len ++ ; } while ( key != 0x0a && key != 0x0d && len < 255 ); str[255] = '\0' ; for (i=0 ;i<num ;i++){ printf("%d. %s\n",i+1,ptr[i]); } return i ; }

その他の回答 (3)

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.3

#2さんのおっしゃっている strtok() は、少々厄介な問題をはらんでいます。 strtok()は、一般的には、使用しないことを推奨されています。 代替として strsep() という関数が提供されている場合もあります。しかしながら、strtok()のほうが規格できちっと定められているため、安全性を考えるとstrsep()だが移植性を考えるとstrtok()のほうがよい、というややこしい話になっています。 まあ、上記は余談に近いですけどね。 学習のためということなら、まずはライブラリ関数を使わずに、#1さんのおっしゃるような方法で、ご自分で組み立ててみることをおすすめします。

  • tomtak
  • ベストアンサー率34% (153/440)
回答No.2

Cの標準関数に、「strtok()」というのがあります。 この関数を使うと、スペースなどで区切られた文字を取り出すことが出来ます。 (この関数を使うには、string.hをインクルードする必要があります。) 使い方は、 第一引数に、解析したい文字列の先頭アドレスを、 第二引数に、区切り文字として使う文字のアドレスを入れます。 戻り値は、分解された文字列のポインタが返ってきます。 strtok()がNULLを返すまで呼び続けます。 (2回目以降strtokを呼ぶときは、第一引数をNULLにします) 例:  char str[256];  char *p,*q;  int i;  printf("英文を入力してください\t");  gets(str);  for (p = str,i=0; (q = strtok(p, " ")) != NULL; p = NULL,i++) printf("%d番目の単語 ... %s\n",i,q);

  • ryoppemag
  • ベストアンサー率15% (15/96)
回答No.1

英文をCHAR配列に格納した後で1文字づつループしてスペースがあったらその次の文字から次の単語

関連するQ&A