2

Cだけを使う

私は文字列を解析したいと思います:

  1. 文字列内の文字の出現回数をカウントします (たとえば、'e'渡された文字列内のすべての s をカウントします)
  2. 数えたら(または私が数えているときでも)、eを3に置き換えます
4

5 に答える 5

9

OK、あなたは怠惰であるか、立ち往生していると仮定して立ち往生しています。

次のような署名を持つ関数が必要です

int ReplaceCharInString(char* string, char charToFind, char charThatReplaces)
{

}

必要な関数の内部

  1. 発生をカウントする整数を宣言するには
  2. 文字列の先頭から末尾に移動するループ
  3. ループ内で、チェックするifステートメントは現在のchar、charToFind、
  4. 発生回数をインクリメントして置換を実行するステートメント
  5. ループの後、発生回数を返す必要があります
于 2009-05-29T08:34:48.190 に答える
3

この関数は文字列を受け取り、すべての「e」を「3」に置き換え、置換を実行した回数を返します。安全で、きれいで、速いです。

int e_to_three(char *s)
{
    char *p;
    int count = 0;
    for (p = s; *p; ++p) {
        if (*p == 'e') {
            *p = '3';
            count++;
        }
    }
    return count;
}
于 2009-05-29T08:37:26.267 に答える
2

これがあなたが始めるためのシェルです。ヘルプが必要な場合は、ここで質問してください。

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

int main(){
    const char* string = "hello world";
    char buffer[256];
    int e_count = 0;
    char* walker;

    // Copy the string into a workable buffer
    strcpy(buffer,string);

    // Do the operations
    for(walker=buffer;*walker;++walker){
        // Use *walker to read and write the current character
    }

    // Print it out
    printf("String was %s\nNew string is %s\nThere were %d e's\n",string,buffer,e_count);
}
于 2009-05-29T08:35:29.483 に答える
2

途中から始める人もいます。

より良いスタートは

char *string = "hello world";
Assert(ReplaceCharInString(string, 'e', '3') == 1);
Assert(strcmp(string, "h3llo world") == 0);
于 2009-05-29T10:35:48.853 に答える
2

一般に、独自の関数を作成するよりも、標準ライブラリ関数を使用する方が適切です。そして、たまたま、文字列から文字を検索し、そのポインタを返す標準ライブラリ関数があります。(これは文字列を扱うので、接頭辞 "str" を持つ関数を探します) (ライブラリ関数は、タスクに特化した CPU オペコードを使用するようにほぼ確実に最適化されますが、手書きのコードはそうではありません)

  1. 一時ポインタ ("ptr" など) を文字列の先頭に設定します。

    • ループ内で、ptr をパラメーターとして使用して上記の関数を呼び出し、それを戻り値に設定します。

    • カウンターをインクリメントします。

    • 'e' が見つからない場合は、ポインターの文字を "3" ブレークに設定します。

于 2009-05-29T09:50:20.097 に答える