![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
No.2ベストアンサー
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 256
#define MAX_LIST 3
int comp(const void *a, const void *b)
{
return strcmp( (const char*)a , (const char*)b ) ;
}
int main(){
char StringList[MAX_LIST][MAX_LEN];
int i;
for( i = 0 ; i < MAX_LIST ; i++ ){
fgets( StringList[i] , MAX_LEN , stdin );
}
qsort( StringList , MAX_LIST , sizeof(char) * MAX_LEN , comp);
printf("\n");
for( i = 0 ; i < MAX_LIST ; i++ ){
printf("%s",StringList[i]);
}
}
参考URL:http://www.doumo.jp/postgretips/tips.jsp?tips=46
No.4
- 回答日時:
// 片方向線形リストによるソート
#include <むふふ>
#define D_MAXSTR_LEN (65535) // 入力される文字列の許容文字数
// ノード構造体
typedef struct _tag_CNODE {
_tag_CNODE *pnext; // 次のノード
int len; // 文字列の長さ(必要ないとおもわれ
char *pstr; // 動的確保した文字列を格納するポインタ
} CNODE, *PCNODE;
// -----------------------------------------------------------------------------
// 文字列を線形リストに追加する
// pnTop : ノードリストの先頭を格納するPCNODEのポインタのポインタ
// pinput : 追加する文字列
// 返値 : 0=正常終了/-1=NULL入力/-2=許容文字数超え/-3=メモリ不足
int AddCNode(PCNODE *pnTop, char *pinput)
{
int i; // 汎用
char *p, *q; // 汎用
PCNODE nA, nB, nZ; // nA:新規作成ノード / nB:比較用 / nZ:一時的前方
if( !(p = pinput) || !(*pinput) ) return(-1); // ▲何も入力されてない?
i = 0; while(*p && i < D_MAXSTR_LEN) { p++; i++; } // 文字数をカウント
if(i > D_MAXSTR_LEN) return(-2); // ▲入力された文字列が最大文字数を超えたらエラー
// ノードを動的に作成する。(mallocは使うのかよw
if(!(nA = (PCNODE)malloc(sizeof(CNODE)))) return(-3); // ▲確保できなかったらエラー
if(!(nA->pstr = (char*)malloc((nA->len = i) + 1))) // 文字列を格納する為のメモリを確保
{ free(nA); return(-3); } // ▲エラーなので確保ノード開放
p = pinput; q = nA->pstr; while(*p++ = *q++); // 文字列をコピー
// ここからソート&片方向線形リストに追加する処理
// リストがカラ?
if(!(nB = *pnTop)) { *pnTop = nA; return(0); } // 必然的に作成したノードがトップ ■終了
// リストの先頭から順に比較していく処理
// ココに入る前に、既にトップノードを取出し済み
nZ = NULL; // 最初は一時的前方無いので
while(nB) { // ループ開始
p = pinput; q = nB->pstr;
while(*p && *q && *p != *q) { p++; q++; } // 同じ文字で無くなるまで進む
if( !(*p) || *p < *q ) // ●新規側の文字列が短いor若いor(全く同じ場合)
{ // 比較ノードの前方に新規ノードを付け足す
// if( !(*q) ) { /* ココに全く同じ場合の処理を書く */ }
// 対象の前方ノードがあるなら、前方ノードのpnextを新規ノードにする
if(nZ) nZ->pnext = nA; else *pnTop = nA; // 前方が無いなら新規がトップになる
nA->pnext = nB; // 新規の次ノードは、今回比較したノード
nB = NULL; // 抜ける為
} else { // ●新規側が長いor若くない
nZ = nB; // 次の一時的前方は今回比較したノード
if(!(nB = nB->pnext)) // リストの最後まできた?
{ // 必然的に新規が末尾になる
nZ->pnext = nA; // 今回比較したノードの次ノードは新規作成ノード
nA->pnext = NULL; // 自分が末尾
}
}
}
return(0); // ■終了
}
// -----------------------------------------------------------------------------
// リスト開放
// pTop : リストの先頭
void ReleaseCNode(PCNODE pTop)
{
PCNODE p = pTop;
while(p) { PCNODE q = p->pnext; free(p->pstr); free(p); p = q; }
}
// -----------------------------------------------------------------------------
// 使用例
void Main(void)
{
PCNODE ptop, q;
ptop = NULL;
// 入力を足してく
AddCNode(&ptop, "AKIRA");
AddCNode(&ptop, "AKIKO");
AddCNode(&ptop, "AIKOSANN");
// 実際の取り出し
q = ptop; while(q) { printf("%s\r\n", q->pstr); q = q->pnext; }
// 後始末
ReleaseCNode(ptop);
}
// -----------------------------------------------------------------------------
みづれーぇ(タブを大文字空白に変換してるYo)
こんなとこ。
バリアブルな入力に、たいお~
コンパイラを通してないよ~。
だから、エラーとかでるよ~。ロぢックエラーもあるかもよ~。
永久ループとかリークの危険性がちょっぴりある。
あと、メモリ使いまくりだよ~。エラーチェックも甘いし。
ちょーてきとうに作ったから~。
大規模になると、頭2文字でリストを分けたり。
頭4文字をlongとかに変換して、高速に処理しる。
PS.#2~#3さんがソース書いてるから触発されて書いちゃった。
規定違反?
No.3
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *x, const void *y){
return(strcmp(*(char**)x,*(char**)y));
}
void main(void){
char *data[]={ "AKIRA","AKIKO","AIKOSANN" };
char *wk;
int i;
printf("before:\n");
for(i=0;i<3;i++)
printf("%s\n",data[i]);
qsort(data,sizeof(data)/sizeof(char*),sizeof(char*),cmp);
printf("after:\n");
for(i=0;i<3;i++)
printf("%s\n",data[i]);
}
No.1
- 回答日時:
strcmpを使って、文字(アスキーコード)の「大きさ」を比べます。
詳しくは↓の辺で。ソートする部分は自作してみましょう。
参考URL:http://www.bohyoh.com/CandCPP/C/Library/strcmp.h …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
ノードとは
-
二分木の高さについて
-
VB6.0でDOMを使用して...
-
vbsのDOMDocumentで要素のText...
-
TreeView の初期表示について
-
2分探索木の高さを求めるプロ...
-
昔Winnyってありましたけど、あ...
-
あるノードリストに、特定の名...
-
C#初心者です。HtmlAgilityPack...
-
特殊文字の処理について
-
このエラー、何とかなりません...
-
XMLで要素が記述された順番に意...
-
タグの有無の判定
-
VBAのXML処理でメモリが足りない?
-
バッチファイルでテキストファ...
-
MSXMLを使ってノードを削除した...
-
スタイルシートを使用したXM...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
昔Winnyってありましたけど、あ...
-
C#でTreeViewのCheckBoxのサイ...
-
同じタグ名の項目取得
-
XML文書の指定した属性値を持つ...
-
複数のマックPCによる数値計算...
-
TreeView の初期表示について
-
あるノードリストに、特定の名...
-
TreeViewに重複する値をセット
-
ノードとは
-
C#のツリービューでツリーノー...
-
2分探索木の高さを求めるプロ...
-
C# TreeView 効率良いノード追...
-
TreeViewの再表示のちらつきを...
-
TreeViewで複数ノードの選択は...
-
4色定理はなぜグラフ理論で証...
-
ツリービューのノードをダブル...
-
ツリービューの使い方が・・・
おすすめ情報