初めて質問を投稿させていただきます。
どうぞよろしくお願いします。
現在、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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列から空白を取り除きたい...
-
fgetsなどのときのstdinのバッ...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
-
間接操作のレベルとは
-
ランダムな英文字の文字列作成
-
Win32APIでのエディットボック...
-
C言語です
-
文字列の中のカンマを消したい
-
テキストデータをそのままバイ...
-
「ポインタのポインタ」を使っ...
-
switch文で文字を比較すること...
-
int型からchar型への変換
-
const char** p;のとき、free(p...
-
ネットワークにつながっている...
-
数値を文字化するにはどうすれ...
-
double型の値をchar配列に変換...
-
-'0'の意味について
-
charからLPTSTRへの変換方法
-
CStringをwchar_tに変換したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
CStringをwchar_tに変換したい
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
テキストデータをそのままバイ...
-
絶対パスからのファイル名の切...
-
double型の値をchar配列に変換...
-
型変換
-
間接操作のレベルとは
-
'const char *' 型は 'char *' ...
-
ネットワークにつながっている...
-
YUV⇔RGB変換がうまくいきません。
-
間接参照のレベルが異なっています
-
str系関数を使わずに二つの文字...
-
strncpyと_tcsncpy_sのヌルの扱...
-
c++ 文字列を入力して、一文字...
-
iconv_open失敗
-
干支のプログラム
おすすめ情報