情報科学演習 宿題 2013.01.21

Back


以下のような文字列配列を準備しておきます.

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


Back