
C言語の勉強しているものですが、以下の問題がわからなくて困っております。
途中まで作成してみましたが、もっとも長い文字列が複数ある場合に対応できるように作成する方法がわかりません。
差し支えなければ、どなたか教えていただけたら幸いです。
環境は、Windows10,Visual Studio2017
(問題)キーボードから3つの文字列を入力させ、そのうち最も長い文字列を表示するプログラムを作りなさい。ただし、同じ長さの文字列が複数ある場合は、すべて表示すること。
期待される実行結果の例①(最長のものが1つしかない場合)
文字列1:lemon ← キーボードから入力
文字列2:apple ← キーボードから入力
文字列3:pineapple ← キーボードから入力
もっとも長い文字列:
pineapple
期待される実行結果の例②(最長のものが複数の場合)
文字列1:yellow ← キーボードから入力
文字列2:green ← キーボードから入力
文字列3:orange ← キーボードから入力
もっとも長い文字列:
yellow
orange
私が作成したものです↓
#include<stdio.h>
#include<string.h>
#define size 256
void main(){
char s1[size], s2[size], s3[size];
int len1,len2,len3;
printf("文字列1:");
scanf_s("%s", s1,size);
printf("文字列2:");
scanf_s("%s", s2,size);
printf("文字列3:");
scanf_s("%s", s3,size);
len1 = strlen(s1);
len2 = strlen(s2);
len3 = strlen(s3);
if (len1 > len2) {
if (len1 > len3) {
printf("もっとも長い文字列:%s\n",s1);
}
}
if (len2 > len1) {
if (len2 > len3) {
printf("もっとも長い文字列:%s\n", s2);
}
}
if (len3 > len1) {
if (len3 > len2) {
printf("もっとも長い文字列:%s\n", s3);
}
}
}
No.3ベストアンサー
- 回答日時:
システム開発の仕事を30年ほどしていました。
こういった質問をされる方は多いのですが、その多くはプログラム言語で答えとなる処理手順を考えておられていて、日本語で考えることをされておられないようにお見受けします。
どういう入力操作を行うこととし、プログラム内部にどういうデータ領域を用意し、どういう処理手順で入力データを処理したら求める結果が得られるか。そしてその結果をどう表示するか。そこを日本語でしっかり考えまとめることが大変重要です。
プログラム内部に持つデータ構造は使用する言語に依存する場合もありますが、それ以外の部分、処理手順(アルゴリズム)は言語には大きくは依存しないかと思います。特にC言語を含む手続き型言語の場合は。
そのプランが持てていないので「分からない」となっているかと思います。
ザッと考えると基本的には以下のような感じでしょう。
よく考えてませんので漏れは幾つもあるはずですが。(^^;
-----
前提として以下のデータ領域を用意する。
・最長文字数を格納するデータ
・最長文字列の個数を格納するデータ
・最長文字数を格納するデータ
・最長文字列を格納するデータを3個
処理手順は以下のとおり。(各種エラー判定や詳細処理は除きます)
(1) 上記の各データを初期化する ※使用言語によってはデータ領域の定義で実施可
(2) 以下の処理を3回繰り返す
1)キーボードから入力された文字列を取り出し文字数を求める
2)この値が「最長文字数を格納するデータ」の値より長ければ以下の処理を行う。
2-1)この値を新たに「最長文字数を格納するデータ」に格納する
※ 3個ある「最長文字数を格納するデータ」の何処に格納するかには「最長文字列の個数を格納するデータ」を使う
2-2)「最長文字列を格納するデータ」と「最長文字列の個数を格納するデータ」を初期化する
2-3)入力文字列を「最長文字列を格納するデータ」に格納する
2-4)「最長文字列の個数を格納するデータ」をカウントアップする
3)この値が「最長文字数を格納するデータ」の値と同じならば以下の処理を行う
3-1)入力文字列を「最長文字列を格納するデータ」に格納する
3-2)「最長文字列の個数を格納するデータ」をカウントアップする
(3) 「最長文字列の個数を格納するデータ」の値だけ以下の処理を繰り返す
1)「最長文字列を格納するデータ」の内容を標準出力する
参考まで。
No.4
- 回答日時:
配列を使うのが一般的ですが、
簡単に処理するなら以下のようにしては如何でしょうか
文字列 s1 の長さを調べる
文字列 s2 の長さを調べる
文字列 s3 の長さを調べる
長さの最大数を求める → M
文字列 s1 の長さを調べる / Mと同じなら s1 を表示
文字列 s2 の長さを調べる / Mと同じなら s2 を表示
文字列 s3 の長さを調べる / Mと同じなら s3 を表示

No.2
- 回答日時:
簡単な動作確認しかしていませんが、以下のようにしてください。
もし、配列とポインターを既に習っているならもっと簡単になると思いますが、
とりあえず、今回は、力ずくで行う方法です。
#include<stdio.h>
#include<string.h>
#define size 256
void main(){
char s1[size], s2[size], s3[size];
int len1,len2,len3;
printf("文字列1:");
scanf_s("%s", s1,size);
printf("文字列2:");
scanf_s("%s", s2,size);
printf("文字列3:");
scanf_s("%s", s3,size);
len1 = strlen(s1);
len2 = strlen(s2);
len3 = strlen(s3);
if (len1 >= len2) {
if (len1 >= len3) {
printf("もっとも長い文字列:%s\n",s1);
if (len1 == len2){
printf("もっとも長い文字列:%s\n",s2);
}
if (len1 == len3){
printf("もっとも長い文字列:%s\n",s3);
}
return;
}
}
if (len2 >= len1) {
if (len2 >= len3) {
printf("もっとも長い文字列:%s\n",s2);
if (len2 == len1){
printf("もっとも長い文字列:%s\n",s1);
}
if (len2 == len3){
printf("もっとも長い文字列:%s\n",s3);
}
return;
}
}
if (len3 >= len1) {
if (len3 >= len2) {
printf("もっとも長い文字列:%s\n",s3);
if (len3 == len1){
printf("もっとも長い文字列:%s\n",s1);
}
if (len3 == len2){
printf("もっとも長い文字列:%s\n",s2);
}
return;
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
Excelで3E8を3.00E+8にしない方...
-
EXCELで=より左の文字を一括で...
-
最も多い文字列を検索するには
-
Excelで指数表現しないようにす...
-
Msgboxの×が押されたとき
-
【Excel VBA】複数ある特定の文...
-
VBScriptでEUC文字列をSJIS文字...
-
Left関数とRight関数を合わせた...
-
エクセルで文字列の最大値を抽...
-
VBAを使って選択した範囲の数字...
-
VBAで、セルの一部の文字色を変...
-
PDFのファイル名をリネームをし...
-
エクセル 数値データを桁をそ...
-
“丸(〇/○/◯)”に似た文字…
-
CStringの文字列検索&抜き出し...
-
ACCESSのSQLでのカンマ’認識に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列をtxtファイル...
-
エクセルで文字列の最大値を抽...
-
Excelで3E8を3.00E+8にしない方...
-
Left関数とRight関数を合わせた...
-
アクセスで特定の数字以外(複...
-
Msgboxの×が押されたとき
-
MS SQLServer のSQLで文字列の...
-
Excelで指数表現しないようにす...
-
ORCLEでの小数の表示方法の変更...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
SQL の Update文(?) と ...
-
VBの「As String * 128」とは?
-
aaa.bbb.ccc という、「ドット...
-
同一セル内に関数と文字列を同...
おすすめ情報