激凹みから立ち直る方法

文字Cが含まれる個数を求めたいです

#include <stdio.h>

int str_chnum(const char str[],int c)
{
int i;
int count=0;
for(i=0;str[i]!="\0";i++)
if (str[i]==c)
count++;
return(count);
}
intmain(void)
{
char st[100];

printf("検索文字列を入力してください:");
scanf("%s",st) ;

printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c));
return(0);
}

コンパイルできません。なぜですか?printfの行がたぶん間違っていると思うんですが。。。

A 回答 (7件)

つっこみたいところがたくさんあります。


まず、大まかなロジックで、
検索対称文字列、または、検索文字がありません。
検索文字列という、複数の文字を対称とした検索にすると、
これだけのルーチンでは作れないですね。

問題は、
検索対象文字列内に文字がいくらあるかを調べるプログラム。
っというのに仮定して回答します。

>> int str_chnum(const char str[],int c)
ケアレスミスですね。
int -> charにしましょう。

>> for(i=0;str[i]!="\0";i++)
「"」でくくられているようですが、「str[i]」は、文字です。
「"」でくくった中身は、文字列として扱われてしまいます。
それで文字列と文字とを比較してしまっているので、コンパイルエラーが出ます。

>>printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c));

まず、printfの構文は、
printf(フォーマット ,パラメータ・・・・);
ですので、
フォーマット内に「%」のついたものが一つしかありません。

つぎに、printfの引数3つめは、コピペしましたね。
これじゃ動きませんよ。

一度、フロー図を書いてプログラムを作った方がいいと思います。

とりあえず、回答を書いておきます。

#include <stdio.h>

int str_chnum(const char[],char);

int main(void)
{
char st[100];
char c;

printf("検索文字を入力してください:");
scanf("%c",&c) ;

printf("検索対称文字列を入力してください:");
scanf("%100s",st) ;

printf("検索文字列数は%uです。\n",str_chnum(st,c));
return(0);
}

int str_chnum(const char str[],char c)
{
int i;
int count=0;

for(i=0;str[i]!='\0';i++)
if (str[i]==c)
count++;

return(count);
}
    • good
    • 0

int str_chnum(const char str[],int c)



int str_chnum(const char str[],char c)
の方がいいのかな
    • good
    • 0

あどヴぁいす



C言語では「文字列」を扱えません。
「ヌル文字('\0')を終端に持つ文字型配列(の先頭のアドレス)」を文字列として扱います。

例えば……
char text[] = "ABC";
if(text == "ABC"){
 printf("同じ");
} else {
 printf("違う");
}
というプログラムを考えます。
一見、"ABC"と"ABC"を比較しているので「同じ」になりそうですが
実行すると「違う」と出ます。
最初の説明を見てください。
「中略(の先頭のアドレス)」と書いてありますね?
内容は同じでも、アドレスが違うので==では正常に比較できないのです。
同姓同名の別人は、名前は同じでも住所は違う、ということです。
    • good
    • 0

> for(i=0;str[i]!="\0";i++)


ここも間違い。文字と文字列を比較しています。
    • good
    • 0

もうちょっと落ち着いて、このプログラムで何がしたいのか(仕様といいます)を決めましょう。



入力として与えたいもの:検索対象文字列 と 検索対象文字
出力として与えたいもの:検索結果(見つかった文字数)

これでよろしいでしょうか?
だとしたら、今のプログラムでまずいところがわかりますね。
そう。対象文字列は入力させていますが、検索対象文字が指定されていません。
No2さんのおっしゃるとおり、'C'固定で良いのならこれでよいですが。。

なお、これもNo2さんがおっしゃっていますが、関数の引数は、与える側は変数の型を指定しません。
受け取る側はどんな型を指定されたのかわからないので、必要です。

申し訳ないですが、まだ意味のあるプログラムを作れる段階にスキルがないように思われます。
引数の渡し方など、C言語の基本仕様をよく理解して取り組んでください。
    • good
    • 0

見た感じ



printf("検索文字列数は%uです。\n",str_chnum(st,'c'));

こうしたいんじゃないかな?
    • good
    • 0

二個ありますけど、printf。

2個目、う~ん、どうされたいのかな?
printf("検索文字列数は%uです。\n",str_chnum(st,c));
ってとこだろうけど・・。cが定義されてないしねぇ。
そもそも文字を数えるっていうのに文字列数ってのもなんだし・・。

もう少し健闘してくださいね。
    • good
    • 0

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


おすすめ情報