初めて質問を投稿させていただきます。
どうぞよろしくお願いします。
現在、C言語の勉強として、
「ポインタのポインタ」を使って「コマンドラインから入力された複数の文字列を昇順にソートして表示するプログラム」
を作っているのですが、
(main関数とソート用関数は分け、出力処理はmainの中でやります)
引数として何を渡せばいいのか、またソートで何を比較して、何を入れ替えれば良いのか、考えれば考えるほど混乱してしまいます。
(過去の質問も一通り調べてみたつもりですが、解決の手がかりとなるものが見つかりませんでした)
それで、どうコーディングすればいいのかを解説して頂きたいのですが、
投稿できる文字数が限られているという事なので、私が未熟なりに作ったプログラムを、見て頂くに必要と思われる部分のみ載せさせて頂きます。
int main(int argc , char** argv)
{
int i = 0; /* カウンタ */
sort(argc-1,argv+1);/* sort関数 */
for(i = 1 ; i < argc ; i++) /* 出力ループ */
{
printf("%s\n",*(argv+i)); /* ソート後文字列出力 */
}
return 0;
} /* main関数ここまで */
void sort(int sargc,char** sargv)
{
int i1 = 0; /* ソート用カウンタ・一時領域 */
int i2 = 0;
char* temp = NULL;
for(i1 = 0 ; i1 < sargc - 1 ; i1++)
{
for(i2 = i1 + 1 ; i2 < sargc ; i2++)
{
if(*(sargv + i1) < *(sargv + i2))
{
temp = *(sargv + i1); /* 入れ替え */
*(sargv + i1) = *(sargv + i2);
*(sargv + i2) = temp;
}
}
}
return;
}
}
なお、実行結果は、例えば、
「実行ファイル名 suzuki tanaka satou」
と入力すれば、
satou
suzuki
tanaka
と出力されるようにしたいと考えています。
どうぞよろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#include <stdio.h>
#include <string.h>
void sort(int sargc,char** sargv);
int main(int argc , char** argv){
int i;
sort(argc-1,argv+1);
for(i = 1 ; i < argc ; i++){
printf("%s\n",*(argv+i)); /* ソート後文字列出力 */
}
return 0;
}
void sort(int sargc,char** sargv){
int i1, i2;
char* temp;
for(i1 = 0 ; i1 < sargc - 1 ; i1++){
for(i2 = i1 + 1 ; i2 < sargc ; i2++){
if(strcmp(sargv[i1] , sargv[i2])>0){
temp = sargv[i1]; /* 入れ替え */
sargv[i1] = sargv[i2];
sargv[i2] = temp;
}
}
}
return;
}
No.2
- 回答日時:
次は、私が、JavaScript の学習のために作成したソートコードです。
カーニハン・リッチー著の「プログラミング言語C」の例題の応用です。
多少は、参考になるかも知れません。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<title>クイックソート</title>
<meta http-equiv="Content-script-Type" content="type">
<script type="text/javascript">
function qsort(v, left, right) {
var i, last;
if (left >= right)
return;
swap(v, left, Math.round((left + right) / 2));
last = left;
for (i=left + 1; i <= right; i++)
if (v[i] < v[left])
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last - 1);
qsort(v, last + 1, right);
}
function swap (v, i, j) {
var temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
</script>
<body>
<script>
<!--
var v = new Array("10","20","11","19","12","18","13","17","14","16","15");
qsort(v, 0, 10);
for (i = 0; i < 11; i++)
document.write(v[i], "<br/>");
//-->
</script>
</body>
</html>
No.1
- 回答日時:
とりあえず動くものを...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void* lhs, const void* rhs)
{
return strcmp(*(const char**)lhs, *(const char**)rhs);
}
int main(int argc, char *argv[])
{
int ac = argc - 1;
char *av[ac];
memcpy(av, argv+1, sizeof(av));
qsort(av, ac, sizeof(char*), &compare);
for (int i = 0; i < ac; i++)
puts(av[i]);
return 0;
}
一応、勉強の余地を残しておくために、意図的にC99でなければコンパイルできないようにしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
Win32APIでのエディットボック...
-
charからLPTSTRへの変換方法
-
間接操作のレベルとは
-
double型の値をchar配列に変換...
-
構造体のアライメント調整
-
C言語 バイナリファイルをfloa...
-
【C言語】構造体内の領域解放(...
-
str系関数を使わずに二つの文字...
-
switch文で文字を比較すること...
-
pingの結果を取得する方法
-
絶対パスからのファイル名の切...
-
charでの計算?
-
バイナリファイルをコピーする...
-
配列をnビットシフトする
-
干支のプログラム
-
C言語の入力した文字を反転させ...
-
”あいうえお” を ”おえういあ...
-
Linuxでフォルダ内全ファイル名...
-
DLL内に定義されている関数名の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
CStringをwchar_tに変換したい
-
charでの計算?
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
'const char *' 型は 'char *' ...
-
テキストデータをそのままバイ...
-
配列をnビットシフトする
-
半角カナ→16進
-
double型の値をchar配列に変換...
-
sprintfに同じ変数は使えるか
-
ファイル名である文字列からbas...
-
ネットワークにつながっている...
-
ftoa の作り方
-
間接操作のレベルとは
-
型変換
-
C言語です
-
C言語のfor文です。 繰り返しの...
-
Win32APIでのエディットボック...
-
【C言語】文字型と整数型の違い
おすすめ情報