コマンドラインから入力した文章を単語単位で切り出します。
但し、文章の最後にピリオドは付けません。
次に、英単語をアルファベット順の辞書式順序 (lexicographic ordering) に並び替えます。
並び替えた後、すべての英単語とその文字数を画面に表示して下さい。
並び替えのために多少の制限が必要になります。
まず簡単のため、英単語は 'a' ~ 'z' の小文字26字からなる単語に限定します。
ハイフンやピリオドといった特殊記号は一切含まないと仮定します。
単語数の上限は 30,一単語の最大文字数は 20 と仮定します。
以下のようになれば、正解です。
> gcc -o exlexico exlexico.c
> exlexico this is an advanced programming class
advanced, 8
an, 2
class, 5
is, 2
programming, 11
this, 4
>
ただしつぎのmain関数は変更せずに使用すること(括弧のついてるコメントは自分がついてないコメントは先生が書きました)
#include<stdio.h> /*標準入出力用*/
#include<string.h> /* 文字列処理用*/
#define MAX_WORD 30 /*単語数の上限*/
#define MAX_CHAR 20 /*一単語の最大文字数*/
typedef struct word {
char letter[MAX_CHA[/url];
int lenght;
} WORD;
int main(int, char **);/*(何のためにある?)*/
int set_word(int, char **, WORD *);
void lexicosort(WORD *, int);/*(バブルソートなどの関数を書く?)*/
int main(int argc, char **argv)
{
WORD word[MAX_WORD]; /*コマンドラインから取得した単語を格納する構造体配列*/
int num; /*配列wordに格納された要素数*/
int i;
num = set_word(argc, argv, word);/*構造体配列のメンバ値をセット(これの意味がよくわかりません)*/
lexicosort(word, num); /*単語を辞書式順序で整列*/
for(i = 0; i < num; i++){
printf("%s, %d\n", word.letter, word.lenght); /*結果表示*/
}
return 0;
}今回のコンパイラはMacのGCCです。(ただしたまにVISUAL C++でC言語書く場合あり(ウィンドウズでレポートを書くため)
自分のレベルは教科書読みながらなら構造体が少しわかる程度でしょうか。
よろしくお願いします。