Cだけを使う
私は文字列を解析したいと思います:
- 文字列内の文字の出現回数をカウントします (たとえば、
'e'
渡された文字列内のすべての s をカウントします) - 数えたら(または私が数えているときでも)、eを3に置き換えます
Cだけを使う
私は文字列を解析したいと思います:
'e'
渡された文字列内のすべての s をカウントします)OK、あなたは怠惰であるか、立ち往生していると仮定して立ち往生しています。
次のような署名を持つ関数が必要です
int ReplaceCharInString(char* string, char charToFind, char charThatReplaces)
{
}
必要な関数の内部
この関数は文字列を受け取り、すべての「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;
}
これがあなたが始めるためのシェルです。ヘルプが必要な場合は、ここで質問してください。
#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);
}
途中から始める人もいます。
より良いスタートは
char *string = "hello world";
Assert(ReplaceCharInString(string, 'e', '3') == 1);
Assert(strcmp(string, "h3llo world") == 0);
一般に、独自の関数を作成するよりも、標準ライブラリ関数を使用する方が適切です。そして、たまたま、文字列から文字を検索し、そのポインタを返す標準ライブラリ関数があります。(これは文字列を扱うので、接頭辞 "str" を持つ関数を探します) (ライブラリ関数は、タスクに特化した CPU オペコードを使用するようにほぼ確実に最適化されますが、手書きのコードはそうではありません)
一時ポインタ ("ptr" など) を文字列の先頭に設定します。
ループ内で、ptr をパラメーターとして使用して上記の関数を呼び出し、それを戻り値に設定します。
カウンターをインクリメントします。
'e' が見つからない場合は、ポインターの文字を "3" ブレークに設定します。