c言語初心者です。
キーボードから与えられた英文に含まれる、各アルファベットの数を数えるプログラムを2次元配列を使用して作成して下さい。なお、小文字と大文字は区別しません。
という、問題で、プログラムを書いたのですが、どこをどのように修正すればよいのかわかりません。教えてください。
#include<stdio.h>
#include<ctype.h>
int main()
{
char str[26][2] = { 0 }, c[100];
int i = 0, j;
scanf("%s", c);
while (c[i] == '\n'){
if (islower(c[i])){
str[c[i] - 'a'][0]++;
}
else if (isupper(c[i])){
str[c[i] - 'A'][1]++;
}
i++;
}
for (j = 0; j < 26; j++){
printf("%c : %d\n", 'a'+j, str[j][0] + str[j][1]);
}
return 0;
}
No.4ベストアンサー
- 回答日時:
正:while (c[i] != '\0') {
誤:while (c[i] == '\n'){
・whileの括弧内には継続条件が入ります。
・cに格納される文字列の終端は\0です。
No.6
- 回答日時:
「2次元配列を使用して」という (謎の) 条件を無視している時点でアウトなわけだが, それ以上に 「'z'-'a' が 25 であ
は) なんじゃないかな>#5.No.5
- 回答日時:
#include<stdio.h>
#include<ctype.h>
#define BUF_SIZE 1024
#define ALPHABET_NUM 26
#define BEGINNING_OF_ALPHABET 'a'
int main()
{
char buf[BUF_SIZE] = { 0 }; /* バッファ */
int count[ALPHABET_NUM] = { 0 }; /* カウント数 */
/* 文字列入力 */
scanf("%s", buf);
for (int i = 0;i < strlen(buf); i++) { /* 文字列長分繰り返す */
/* カウントアップ */
count[tolower(buf[i]) - BEGINNING_OF_ALPHABET]++;
}
/* 結果表示 */
for (int i = 0; i < ALPHABET_NUM; i++) {
printf("%c : %d\n", i + BEGINNING_OF_ALPHABET, count[i]);
}
return 0;
}
ちなみに自分ならばこう書きます。
・定数値はdefineで
・コメントは適時いれる
・大文字で入力されても、小文字で入力されてもtolowerに
通してしまえば小文字になるので
count[tolower(buf[i]) - BEGINNING_OF_ALPHABET]++; とする
※実際に上記ソースを動作させる場合は、行頭の全角スペースを
半角スペースに置換してください
No.3
- 回答日時:
同じ学校の人は解決したみたいですよ。
二次元配列についてはやっぱり謎な仕様(課題)ですねぇ。
特徴的な課題にして、自力で解いていない人をあぶり出す手なんでしょうかね?
# ググり易いし。
No.2
- 回答日時:
%s で取ると改行は決して入りません>#1. というか, そもそも scanf を使う必然性がまったくない.
あと, 例えば 'Z'-'A' が 40 になる環境だったらどうしよう.
しかし, なんで 2次元配列を使わなきゃならんのか....
No.1
- 回答日時:
stdio -> studio
whileはループ継続条件を書く。質問の記述だと改行以外で抜ける。
あと、scanfで得る文字列は改行が入るのか? 安全を考えるとループ条件はc[i]!=0の方が良いかな。
# 厳密に言うとscanfを使う時点でリスクがあるけど
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
文字列中に含まれる文字の個数...
-
C言語で16進数文字列から16進数...
-
[Java]文字列分割
-
fgets関数を使用したときの文字...
-
itoaわかりません
-
C言語 空白の行(改行のみ)が...
-
ある文字列で2回目3回目に出現...
-
反転した数値を表示させるやり方
-
CStringについて
-
C++
-
単語数のカウントについて
-
strstrを利用しない文字列検索...
-
c言語のプログラミングでキーボ...
-
C言語での引数の省略方法
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
マイナスからプラスへ転じた時...
-
プログラミング初心者です。 Py...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
charと%c , %s の関係について
-
strstrを利用しない文字列検索...
-
反転した数値を表示させるやり方
-
C言語のステップ数をカウントす...
-
itoaわかりません
-
fgets関数を使用したときの文字...
-
C言語 空白の行(改行のみ)が...
-
fgetsで拾われる改行文字を削除...
-
小文字のみを数える方法
-
ある文字列で2回目3回目に出現...
-
CStringについて
-
単語数のカウントについて
-
Cで「大文字、小文字の判定」は...
-
ブランクのチェック
-
C言語で16進数文字列から16進数...
-
文の意味
-
1行の文字列を時間差で表示する...
-
文字の入れ替えについて
おすすめ情報