ここから本文です

c言語に関して質問です。

アバター

ID非公開さん

2019/7/1910:32:33

c言語に関して質問です。

#include<stdio.h>

int main(void) {
char a[11], b[11];
int cheak[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
scanf("%s", a);
scanf("%s", b);

for (i = 0; b[i] != '\0'; i++) {
if (a[i] == b[i]) {
cheak[0]++;
} else if (a[i + 1] == b[i]) {
cheak[1]++;
} else if (a[i + 2] == b[i]) {
cheak[2]++;
} else if (a[i + 3] == b[i]) {
cheak[3]++;
} else if (a[i + 4] == b[i]) {
cheak[4]++;
} else if (a[i + 5] == b[i]) {
cheak[5]++;
} else if (a[i + 6] == b[i]) {
cheak[6]++;
} else if (a[i + 7] == b[i]) {
cheak[7]++;
} else if (a[i + 8] == b[i]) {
cheak[8]++;
} else if (a[i + 9] == b[i]) {
cheak[9]++;
} else if (a[i + 10] == b[i]) {
cheak[10]++;
} else {
cheak[11]++;
}
}
for (i = 0; i < 11; i++) {
if (cheak[11] != 0) { //NOT
count[0]++;
} else if (cheak[i] == len && len > 0) {
count[1]++;
}
}

printf("\"%s\" is ", b);
if (count[1] == 0 || count[0] != 0) {
printf("NOT ");
}
printf("an initial segment of \"%s\".\n", a);

return 0;
}

このようなプログラムを作成したのですが、for文の中のif文がとても汚いのでどうにかしてキレイにしたいです。
どうすれば良いでしょうか?
C言語初心者なので、具体的にお願いいたします。

閲覧数:
46
回答数:
3

違反報告

ベストアンサーに選ばれた回答

yi0********さん

2019/7/1911:58:55

そもそも何をするプログラムですか?
添字が範囲外とか未定義の変数があるとかを抜きにして素直に解釈すれば
b の文字列が a の中にあるかを調べるということになるように思うのですが
b と a の内容が
"abc" , "012abc3"
のような場合はうまくいきますが
"abc", "0a2abc3"
"abad", "012abad"
のような場合はうまくいきません。

  • アバター

    質問者

    ID非公開さん

    2019/7/2121:18:20

    "abc", "0a2abc3""abad", "012abad"の場合にもうまく行くようなプログラムを入力したいのですが、知識が乏しいため出来たと勘違いしていました。
    プログラムはあなたの解釈で間違いないです。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

2019/7/2000:15:43

配列の扱いとかがダメダメなのは置いておいて(いいのか?)、きっと

for (i = 0; b[i] != '\0'; i++) {
for(j=0;a[j]!='\0'; j++){//ここをfor(int j=0;...としてはいけない)
if(a[j]==b[i]){
break;
}
cheak[j]++; //もしかしてcheck?
}

とかやりたかったのかな、と妄想します。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

pok********さん

2019/7/1911:01:20

char a[11], b[11];

for (i = 0; b[i] != '\0'; i++) {
<略>
} else if (a[i + 10] == b[i]) {

そもそも元のプログラムがおかしい。

bの文字列入力の最大が10文字とするなら
for (i = 0; b[i] != '\0'; i++) {
ループにおけるiの最大はi=10となる。
} else if (a[i + 10] == b[i]) {
は、i=10ならa[10+10]=a[20]で
宣言していない場所を判定条件にしている。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる