学校でだされた問題でよくわからないところがありやってみてもできないので誰かこの問題をやってみていただけないでしょうか?
<問題>
実行結果が次のようになるプログラムをつくりなさい。
例
Please enter a statemant: This is a programming class
Total 5 words. Each word contains;
This: 4 letters.
is: 2 letters.
a: 1 letters.
programming: 11 letters.
class: 5 letters.
ただし、単語数の上限は30、一単語の最大文字数は20と仮定する。
文章入力にはgets関数を使用する。
という問題なんですがよろしくお願いします。
文字列の問題について
Re:文字列の問題について
#include <stdio.h> #include <string.h> #define MAX_WORD (30) ///< 最大単語数 #define MAX_LENGTH (20) ///< 単語毎の最大文字数 #define BUFFER_SIZE (1024) ///< 入力バッファサイズ int main() { const char separator[/url] = [color=#0000ff">" ,\t\n"[/color]; ///< トークンを分割する文字達 char word[MAX_WORD][MAX_LENGTH] = {0}; ///< トークン分割後の単語保存領域 char buffer[BUFFER_SIZE] = {0}; ///< 入力用バッファ char* token = NULL; ///< トークン操作用 int token_num = 0; ///< トークン数 int token_count; ///< トークンカウンタ(コンソール出力制御に使用) printf("Please enter a statement: "); if( gets(buffer) == NULL ) { /// エラー発生 return 1; } /// トークン分割 token = strtok(buffer, separator); while( token != NULL ) { strcpy(word[token_num++], token); token = strtok(NULL, separator); } printf("\nTotal %d words. Each word contains;\n", token_num); for( token_count = 0; token_count < token_num; token_count++ ) { printf("%s: %d letters.\n", word[token_count], strlen(word[token_count])); } return 0; }不明な点があれば何でもどうぞ。
Re:文字列の問題について
ざっと見た感じ、
[color=#d0d0ff" face="monospace]char word[MAX_WORD][MAX_LENGTH] = {0};[/color]
は
[color=#d0d0ff" face="monospace">char word[MAX_WORD][MAX_LENGTH + 1] = {0};[/color]
じゃないですか?
[color=#d0d0ff" face="monospace]char word[MAX_WORD][MAX_LENGTH] = {0};[/color]
は
[color=#d0d0ff" face="monospace">char word[MAX_WORD][MAX_LENGTH + 1] = {0};[/color]
じゃないですか?
文字列の問題について
keichanさんのプログラムを教科書などを見て調べてやってみたら内容はほとんどわかりました。
今度は自分でできるようにもっと勉強をしていきたいと思います。意見をくださった方にはとても感謝してます。ありがとうございました。
今度は自分でできるようにもっと勉強をしていきたいと思います。意見をくださった方にはとても感謝してます。ありがとうございました。
Re:文字列の問題について
すいません、わかったつもりだったんですが
token = strtok(buffer, separator);
while( token != NULL ) {
strcpy(word[token_num++], token);
token = strtok(NULL, separator);
のところの意味がいまいち理解できません。教えていただけないでしょうか?
token = strtok(buffer, separator);
while( token != NULL ) {
strcpy(word[token_num++], token);
token = strtok(NULL, separator);
のところの意味がいまいち理解できません。教えていただけないでしょうか?
Re:文字列の問題について
strtok関数は
特定の区切りを指定することで
そこで分割してくれる便利な関数です。
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
この辺参考になります。
特定の区切りを指定することで
そこで分割してくれる便利な関数です。
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
この辺参考になります。
Re:文字列の問題について
strtok関数の使い方をいかに説明してみました。
strにある文字列を,で区切ってそれぞれの数字を格納しています。
strにある文字列を,で区切ってそれぞれの数字を格納しています。
#include <stdio.h> #include <string.h> int main(void){ int i=0;//forで使うi char s[5][5],str[/url] = "8,6,7,9,2",*tp; tp = strtok( str ,"," );//読み取る文字列はstr。区切るのは「,」 while (1){ if ( tp != NULL ){ //最後まで読み取ってなかったら strcpy(s,tp);//区切られた区間の文字列をsに格納 i++; } else//最後まで読み取られたらブレイク break; tp = strtok( NULL, "," );//「,」を区切りにして次までのトークンへのポインタを返す } for(i=0;i<5;i++) printf("%s\n",s); return 0; }