はじめまして

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
uniuni

はじめまして

#1

投稿記事 by uniuni » 17年前

自分で作った問題なんですけど、用意された配列の文字数を数えて、文字数の多い順に並べるPGを作ってるんですけど、なかなかうまくいきません。どうすればいいでしょうか?

いまは、こんな感じです。

#include <stdio.h>
#include <string.h>

int main(void)
{
//変数の宣言と初期化
char name[5][10] = {"arita", "simojo", "chatani", "saitou", "otaku"};
char array[10];
int ii, jj, len;

for(ii=0; ii<5; ii++){
len = strlen(name[ii]);

if(len[ii+1] > len[ii]){
array[0] = len[ii];
len[ii] = len[ii+1];
len[ii+1] = array[0];
}
printf("%s %d文字\n", name, len);
}


return 0;
}

toyo

Re:はじめまして

#2

投稿記事 by toyo » 17年前

char* name[5] = {"arita", "simojo", "chatani", "saitou", "otaku"};
ソート後
name[0] = "chatani";
name[1] = "simojo";
name[2] = "saitou";
name[3] = "arita";
name[4] = "otaku";
としてname[ ] をソートするか
char name[5][10] = {"arita", "simojo", "chatani", "saitou", "otaku"};
int name_len[5];
int i;
for (i = 0; i < 5; i++) {
    name_len = i;
}
ソート後
name_len[0] = 2;
name_len[1] = 1;
name_len[2] = 3;
name_len[3] = 0;
name_len[4] = 5;

としてname_len[ ]をソートするようにしたらいいと思います。
ソートはバブルソートっぽいですが普通は2重ループになります。

バグ

Re:はじめまして

#3

投稿記事 by バグ » 17年前

こんな感じでしょうか?
#include <stdio.h>
#include <string.h>

int main(void)
{
	// 変数の宣言と初期化
	char name[5][10] = {"arita", "simojo", "chatani", "saitou", "otaku"};
	char array[10];
	int i, j, len;

	// ソート用ループ
	for (i = 0; i < 5; i++)
	{
		len = strlen(name); 

		for (j = 0; j < 5; j++)
		{
			if (len > (int)strlen(name[j]))
			{
				strcpy(array, name[j]);
				strcpy(name[j], name);
				strcpy(name, array);
			}
		}
	}

	// ソート結果表示用ループ
	for (i = 0; i < 5; i++)
	{
		printf("%s %d文字\n", name, (int)strlen(name)); 
	}

	return 0;
}

uniuni

Re:はじめまして

#4

投稿記事 by uniuni » 17年前

ありがとうございました。

toyo

Re:はじめまして

#5

投稿記事 by toyo » 17年前

連続で失礼します
なぜarray[10]と配列を10個も用意してarray[0]しか使ってないのかと考えてたらひょっとして
#include <stdio.h>
#include <string.h>

int main(void)
{
	//変数の宣言と初期化
	char name[5][10] = {"arita", "simojo", "chatani", "saitou", "otaku"};
	char array[10];
	int ii, jj, len;
	for(ii=0; ii<4; ii++){
		for(jj=ii; jj<5; jj++){
		    if(strlen(name[jj]) > strlen(name[ii])){
		        strcpy(array, name[ii]);
		        strcpy(name[ii], name[jj]);
		       	strcpy(name[jj], array);
		    }
		}
	}
	for(ii=0; ii<5; ii++){
    	 printf("%s %d文字\n", name[ii], strlen(name[ii])); 
	}
	return 0;
}
というようなことがしたかったのでしょうか。
文字列の代入にはstrcpy( )を使います。

uniuni

Re:はじめまして

#6

投稿記事 by uniuni » 17年前

これを文字数が同じなら名前順に並び替えるときはどうすればいいのでしょうか?

バグ

Re:はじめまして

#7

投稿記事 by バグ » 17年前

strcmp関数を調べてみましょう。

toyo

Re:はじめまして

#8

投稿記事 by toyo » 17年前

文字列の比較はstrcmp( )を使います
#include <stdio.h>
#include <string.h>

int main(void)
{
	//変数の宣言と初期化
	char name[5][10] = {"arita", "simojo", "chatani", "saitou", "otaku"};
	char array[10];
	int ii, jj;
	for(ii=0; ii<4; ii++){
		for(jj=ii; jj<5; jj++){
			if(strlen(name[jj]) > strlen(name[ii])){
				strcpy(array, name[ii]);
				strcpy(name[ii], name[jj]);
				strcpy(name[jj], array);
			}
			else if(strlen(name[jj]) == strlen(name[ii]) && strcmp(name[ii], name[jj]) > 0){
				strcpy(array, name[ii]);
				strcpy(name[ii], name[jj]);
				strcpy(name[jj], array);
			}
		}
	}
	for(ii=0; ii<5; ii++){
		printf("%s %d文字\n", name[ii], strlen(name[ii])); 
	}
	return 0;
}

閉鎖

“C言語何でも質問掲示板” へ戻る