みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

文字列とポインタの問題です。

#include<stdio.h>
int f(char *s);

int main(void){
char*str="nasida Institute of Technology";
int i;
i=f(str);
printf("%s:%d\n",str,i);
return 0;

}
int f(char *s)
{
int j=0;
while(*s!='\0'){
if(*s=='t'){
j++;
}
s++;
}
return j;
}

このプログラムの答えが3になるんですが、if文のとこの動作がよく分からないので、よろしくお願いします。

投稿日時 - 2009-07-29 01:08:44

QNo.5164054

困ってます

質問者が選んだベストアンサー

「aoilove21さん」はじめまして、こんばんは。

> このプログラムだと、*sがtになったらj++をして、それ以外だったらs++するで
> 合ってますよね?

ちょっと違います。
「*sがtになったら、j++をして」は、合っています。
「それ以外だったら、s++する」は、「*sがtになっても、*sがtにならなくてもs++する」が正しいです。「必ず、s++は行われます。」

「*sがtになったらj++をして、それ以外だったらs++する」だと、次のようになります。

int f(char *s){
    int j = 0;

    while(*s != '\0'){
        if(*s == 't'){
            j++;
        }else{
            s++;
        }
    }
    return j;
}

> s++は文字列を1個づらすってことだと思うのですけど、
> j++は何をしてるんですか?

「j++」は「*s=='t'」の場合に実行されるので、文字列"nasida Institute of Technology"の't'をカウントしていることになります。

だから、答えが3になります。

投稿日時 - 2009-07-29 02:03:05

お礼

分かりやすい回答ありがとうございます^^

ちゃんと理解することできました。
ありがとうございました。

投稿日時 - 2009-07-29 02:13:06

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

「if文の動作」はわかりますか?

投稿日時 - 2009-07-29 01:14:18

補足

このプログラムだと、*sがtになったらj++をして、それ以外だったらs++するで合ってますよね?
s++は文字列を1個づらすってことだと思うのですけど、j++は何をしてるんですか?

投稿日時 - 2009-07-29 01:17:31