c言語で、文字列を格納した2次元配列をソートしたいのですが
全角文字列だとどうもうまくいきません。。
おそらくselectionSort関数の書き方が悪いのですが,
どこらへんがおかしい挙動をうんでしまっているのか教えていただきたいです。
どう改善すればいいのかも教えていただけると嬉しいです。
以下試したことです。
c言語
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5#define N 256 // 1単語(形態素)のバイト長 6 7void selectionSort(char numbers[N][256], int array_size) 8{ 9 int i; // 配列の先頭を指すインデックス 10 int j; // 残りの要素を指すインデックス 11 int min; // 最小値を持つ要素のインデックス 12 char temp[N]; // 交換用の一時変数 13 14 for (i = 0; i < array_size - 1; i++) { 15 min = i; // 配列の先頭を最小値の要素とする 16 for (j = i+1; j < array_size; j++) { // 比較のループ 17 if (strcmp(numbers[min], numbers[j]) > 0 ) { 18 min = j; // 最小値を持つ要素を更新 19 } 20 } 21 // 最小値を持つ要素を先頭の要素と交換 22 strcpy(temp, numbers[i]); 23 strcpy(numbers[i], numbers[min]); 24 strcpy(numbers[min], temp); 25 } 26} 27 28//簡単な確かめ文 29int main(void) { 30 31 int i = 0; 32 char v[N][256] = {"あ", "い", "あう"}; 33 selectionSort(v, N); 34 for(i=0;i<7;i++) 35 printf("%s",v[i]); 36 37 return 0; 38 39}
出力結果
Illegal instruction: 4
main文を少し変更して,
c言語
1int main(void) { 2 3 int i = 0; 4 char v[N][256] = {"a", "b", "a"}; 5 selectionSort(v, 3); 6 for(i=0;i<7;i++) 7 printf("%s",v[i]); 8 9 return 0; 10 11}
出力結果
Illegal instruction: 4
関数の第二引数の「3」を「N」に変えると
出力結果
Illegal instruction: 4
以上試したことでした。
回答2件
あなたの回答
tips
プレビュー