文字列のアルファベット順並び替え

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 文字列のアルファベット順並び替え

Re: 文字列のアルファベット順並び替え

#6

by shika » 7年前

コード:

for (i = N - 1; 0 < i; i--)
        for (j = 0; j < i; j++)
            if (ch[j] > ch[j + 1])
            {
                ex = ch[j];
                ch[j] = ch[j + 1];
                ch[j + 1] = ex;
            }
では、どうでしょう。
i の設定がおかしかったのではないでしょうか?

Re: 文字列のアルファベット順並び替え

#5

by かずま » 7年前

TKD さんが書きました:"asrutocdgeqkfg"という文字列をアルファベット順に並び替えたいのですが下記のプログラムだとうまくいきません
"asrutocdgeqkfg" という文字列は、最後に終端文字 '\0' が
あるので、ch のサイズは 15バイトですが、並び替えるのは
'a' から 'g' までの 14文字であることに注意してください。

Re: 文字列のアルファベット順並び替え

#4

by みけCAT » 7年前

box さんが書きました:ループの中で、i がからむ処理がないのが気になります。
・i がからむ処理をしたければ、そういうコードを書く
・処理がなくていいのなら、i のループをやめる
どっちかにしましょう。
iに依存して処理内容を変えることなく、単にN - 1回ループ処理を実行しているのですね。
あえて「i のループをやめる」なら、変数名をcountなどにするといいかもしれませんね。
もちろん、この程度の入力では考えることが増える割にあまり性能向上の意味は無いでしょうが、よくあるようにiに依存してどこまで見るかを決めてもいいでしょう。

Re: 文字列のアルファベット順並び替え

#3

by box » 7年前

TKD さんが書きました:"asrutocdgeqkfg"という文字列をアルファベット順に並び替えたいのですが下記のプログラムだとうまくいきません。よろしければアドバイスをよろしくお願いします。

コード:

	for (i = 0; i < N - 1; i++)
		for (j = 0; j < N - 1; j++)
			if (ch[j] > ch[j + 1])
			{
				ex = ch[j];
				ch[j] = ch[j + 1];
				ch[j + 1] = ex;
			}
ループの中で、i がからむ処理がないのが気になります。
・i がからむ処理をしたければ、そういうコードを書く
・処理がなくていいのなら、i のループをやめる
どっちかにしましょう。

Re: 文字列のアルファベット順並び替え

#2

by みけCAT » 7年前

まず、ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。

次に、「うまくいきません」だとわかりにくいです。
具体的に「どうなってほしいのに」「現状どうなってしまう」のかが書かれているとわかりやすそうです。

そして、printfでchar*型のデータを要求する書式%sにchar型のデータを渡しているので、未定義動作になります。
1文字出力するには書式%cを用いるといいでしょう。

文字列のアルファベット順並び替え

#1

by TKD » 7年前

"asrutocdgeqkfg"という文字列をアルファベット順に並び替えたいのですが下記のプログラムだとうまくいきません。よろしければアドバイスをよろしくお願いします。

#include<stdio.h>
#define N 15

int main()
{
int i,j,k;
char ch[N] = "asrutocdgeqkfg";
char ex;

for (i = 0; i < N - 1; i++)
for (j = 0; j < N - 1; j++)
if (ch[j] > ch[j + 1])
{
ex = ch[j];
ch[j] = ch[j + 1];
ch[j + 1] = ex;
}


for (k = 0; k < N; k++)
{
printf("%s", ch[k]);
}

return 0;
}

ページトップ