dポイントプレゼントキャンペーン実施中!

次のプログラムは、初期化により文字列を定義し、辞書式配列にしたとき、どの文字列が先頭にくるかを調べるプログラムなのですが。■■■を教えてください

#include <stdio.h>
#include <string.h>
#define N 5

//関数のプロトタイプ宣言
char *min(char *p[] , int n);

int main(void)
{
char *p[N] = {"Hello" , "Hi" , "Happy" , "HaHaHa" , "Heaven"};

printf("辞書式配列で先頭となる文字列は%s\n" , ■■■);
}

char *min(char *p[] , int n)
{
int min; //最小値のアドレス
Int i; //カウンタ

min = 0;
for(i = 1; i < n; i++){
if (strcmp(■■■ , ■■■) > 0){
■■■= ■■■;
}
}
return ■■■;
}

A 回答 (5件)

内容としては----以下のとおりです



・関数minはp[min]=最小となる文字列へのポインタを返すのでprintfの%sにそのまま渡します

・変数minが、最小となる要素へのインデックスを覚えておくので、
strcmp(p[min] , p[i]) でp[i]の方が小さければ、
min=i で最小インデックスminをiに更新します

----
#include <stdio.h>
#include <string.h>
#define N 5

//関数のプロトタイプ宣言
char *min(char *p[] , int n);

int main(void)
{
char *p[N] = {"Hello" , "Hi" , "Happy" , "HaHaHa" , "Heaven"};

printf("辞書式配列で先頭となる文字列は%s\n" , min(p, N));
}

char *min(char *p[] , int n)
{
int min; //最小値のアドレス
int i; //カウンタ

min = 0;
for(i = 1; i < n; i++){
if (strcmp(p[min] , p[i]) > 0){
min=i;
}
}
return p[min];
}
    • good
    • 0

> 辞書式配列



というのがよくわかりませんが、strcmp関数では単純比較しかできませんので違うように思います。
strxfrm関数で変換してから比較するのかもしれませんが、この穴埋めではsetlocaleを呼び出すのは無理があります(関数を無理やり呼ぶことはできますが、<locale.h>をインクルードできないので、LC_COLLATEまたはLC_ALLの定義が得られません)。
どうすべきなのかをもう少し明確にしてください。
    • good
    • 0

#1ですが、さすがに答を直書きでは問題ですよね?


というわけで、きちんと先頭を探すプログラムを書きます。

(i) 配列を破壊しないもの
最初の■■■:
(strcmp(a[0], a[1]) < 0) ? (strcmp(a[0], a[2]) < 0) ? (strcmp(a[0], a[3]) < 0) ? (strcmp(a[0], a[4]) < 0) ? a[0] : a[4]
: (strcmp(a[3], a[4]) < 0) ? a[3] : a[4]
: (strcmp(a[2], a[3]) < 0) ? (strcmp(a[2], a[4]) < 0) ? a[2] : a[4]
: (strcmp(a[3], a[4]) < 0) ? a[3] : a[4]
: (strcmp(a[1], a[2]) < 0) ? (strcmp(a[1], a[3]) < 0) ? (strcmp(a[1], a[4]) < 0) ? a[1] : a[4]
: (strcmp(a[3], a[4]) < 0) ? a[3] : a[4]
: (strcmp(a[2], a[3]) < 0) ? (strcmp(a[2], a[4]) < 0) ? a[2] : a[4]
: (strcmp(a[3], a[4]) < 0) ? a[3] : a[4]

後の■■■:前回の回答と同じ

(ii) 配列を破壊するもの
最初の■■■:
(
(a[0] = (strcmp(a[0], a[1]) < 0) ? a[0] : a[1]),
(a[0] = (strcmp(a[0], a[2]) < 0) ? a[0] : a[2]),
(a[0] = (strcmp(a[0], a[3]) < 0) ? a[0] : a[3]),
(a[0] = (strcmp(a[0], a[4]) < 0) ? a[0] : a[4]),
a[0]
)

後の■■■:前回の回答と同じ

代わりに宿題です。上で何をやっているのか説明しなさい。
    • good
    • 0

C/C++の宿題片付けます 154代目


http://hibari.2ch.net/test/read.cgi/tech/1322562 …

Java の宿題ここで答えます Part 71
http://toro.2ch.net/test/read.cgi/tech/130907689 …
    • good
    • 0

#include <stdio.h>


#include <string.h>
#define N 5

//関数のプロトタイプ宣言
char *min(char *p[] , int n);

int main(void)
{
char *p[N] = {"Hello" , "Hi" , "Happy" , "HaHaHa" , "Heaven"};

printf("辞書式配列で先頭となる文字列は%s\n" , p[3]);
}

char *min(char *p[] , int n)
{
int min; //最小値のアドレス
Int i; //カウンタ

min = 0;
for(i = 1; i < n; i++){
if (strcmp("" , "") > 0){
min= min;
}
}
return NULL;
}

宿題のようなので、真面目な答えは自分で考えましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!