char str[11] = "abcdefghij"; char word[5][4]; char tmp[4]; |
これを用いて,文字列単位の並べ変えを以下のように行なうプログラムを作成してください.
My student number: s124099 cgb bdi dcc jdb dee bdi cgb dcc dee jdb ------------------------------------- |
なお,C言語では文字列単位で代入する場合には,strcpy という関数が必要になります.例えば以下のように使用します.
char str1[4] = "abc"; char str2[4] strcpy(str2, str1); printf("%s\n", str2);上記の strcpy 関数を使用しない場合には,for 文を使用して要素を1つずつ代入していく方法もあります.なお,strcpy を使用する際には教室のCの環境では string.h というヘッダファイルもインクルードしないといけないようですので,注意してください.
#include <string.h>また,文字は属性として文字コードの数値を持っていますので,比較演算子で大小関係を見ることができます.文字コードが小さい方がアルファベットでは前にありますので,比較演算子を使用して並べ替えるかどうかを判断できます.
/* ************************************************** */ /* */ /* 情報科学演習 C6 C7 */ /* レポート課題 */ /* 2013.01.21 */ /* */ /* ************************************************** */ /* */ /* 学生番号: */ /* */ /* 氏名: */ /* */ /* ************************************************** */ /* */ /* この行以降に解答のプログラムを書くこと */ #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> main() { srand((unsigned) time(NULL)); int i, j; char str[11] = "abcdefghij"; char word[5][4]; char tmp[4]; printf("My student number: s124099\n\n"); for(i=0; i<=4; i++){ for(j=0; j<=3; j++) word[i][j] = str[rand()%10]; word[i][3] = '\0'; } for(i=0; i<=4; i++) printf("%4s", word[i]); printf("\n"); for(i=0; i<=3; i++){ for(j=i+1; j<=4; j++) if(word[i][0]>word[j][0]){ strcpy(tmp, word[i]); strcpy(word[i], word[j]); strcpy(word[j], tmp); } } for(i=0; i<=4; i++) printf("%4s", word[i]); printf("\n"); printf("\n-------------------------------------\n\n"); return(0); } |