自分で作った問題なんですけど、用意された配列の文字数を数えて、文字数の多い順に並べる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;
}
はじめまして
Re:はじめまして
char* name[5] = {"arita", "simojo", "chatani", "saitou", "otaku"};
ソート後
name[0] = "chatani";
name[1] = "simojo";
name[2] = "saitou";
name[3] = "arita";
name[4] = "otaku";
としてname[ ] をソートするか
としてname_len[ ]をソートするようにしたらいいと思います。
ソートはバブルソートっぽいですが普通は2重ループになります。
ソート後
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:はじめまして
こんな感じでしょうか?
#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; }
Re:はじめまして
連続で失礼します
なぜarray[10]と配列を10個も用意してarray[0]しか使ってないのかと考えてたらひょっとして
文字列の代入にはstrcpy( )を使います。
なぜ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( )を使います。
Re:はじめまして
文字列の比較は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; }