1

まず、このコードの目的は、文を C 文字列に取り込むことです。文を反復して、特定の文字のインスタンスがいくつ発生するかを確認します。

このコードはある程度機能していますが、正しい番号が表示されませんか? 理由がわからない:

#include <stdio.h>
#include <string.h>

int tracker=0;
int letterCount (char *sentence)
{
    int s=strlen(sentence);
    int i=0;


    for (i=0; i<s; i++){
        if (sentence[i]=='h') {
            tracker++;
        }
    }
    return tracker;
}

int main(int argc, const char * argv[])
{

    char *string="Hi there, what's going on? How's it going?";


    letterCount(string);

    printf("this sentensce has %i H's", tracker);


    return 0;
}

私が得ている出力:

this sentensce has 2 H's

正しくありません。何か案は?

4

4 に答える 4

1

大文字と小文字を区別しない H を意味する場合、これは正しいコードです。

#include <stdio.h>
#include <string.h>

int tracker=0;
int letterCount (char *sentence)
{
    int s=strlen(sentence);
    int i=0;


    for (i=0; i<s; i++){
        if (sentence[i]=='h' || sentence[i]=='H') {  //'h' is not the same as 'H'
            tracker++;
        }
    }
    return tracker;
}

int main(int argc, const char * argv[])
{

    char *string="Hi there, what's going on? How's it going?";


    letterCount(string);

    printf("this sentensce has %i H's", tracker);


    return 0;
}

コード内の小文字と大文字のつづりが間違っています。C 言語では大文字と小文字が区別されることに注意してください。

于 2012-07-16T23:43:56.243 に答える
0
size_t letterCount(const char* sentence, char c)
{
  size_t count = 0;

  while(sentence)
  {
    count += (*sentence == c);
    ++sentence;
  }

  return count;
}

ここで何が見えますか?

  • 負の数を持つことはできないため、size_t のような符号なしの型を使用してください
  • 文は変更してはならないので、const にする必要があります
  • 一致させたい文字を渡す
  • 文はポインタです。null の場合は完了です。strlen を呼び出す必要はありません。
  • 文はポインターです。実際のポインターは値渡しなので、変更できます (インクリメントを参照してください。追加の変数を作成する必要はありません)。
  • ブール演算子は 1 または 0 を返すため、if を使用する必要はありません。(ただし、if ブランチまたは add 0 の方が安いかどうかを確認するためにアセンブリを調べていません。YMMV)
于 2012-07-17T03:50:19.097 に答える
0

Hあなたのラベルはsの数について語っていますが、あなたは代わりに s をletterCount探しますh- そして、あなたが提供した入力には、それが言うように、小文字のインスタンスが 2 つあるように見えますh

それらを一緒に数えたい場合は、持っているものを確認する前に、tolowerまたは前に各入力をフィルタリングすることを検討してください。toupper

于 2012-07-16T23:44:12.663 に答える
0

その数は私には正しいように見えます。その文には 2 つの「h」文字があります。「H」文字もカウントしたい場合は、別のチェックが必要です。

于 2012-07-16T23:45:03.327 に答える