私はいくつかのC++をブラッシングしているので、解決しようとしている問題の1つは文字ポインタの文字を数え、しかし私の解決策では、私は特有の結果に気付きました。私はcharへの参照を関数に渡し、それは3のカウントを返しました。なぜ、参照テストは文字への参照のために3のカウントを返すのですか?文字ポインタの文字数をカウントする
文字にヌルターミネーターがないことを認識しているので、コードはカウントし続けますが、最終的には結果が返されるため、ソリューションが不足しています。より強固なアイデアはありますか?ここに私の解決策と結果があります。
CountCharacters.cpp
#include <cstdio>
#include <iostream>
#define ASSERT_EQUALS(paramx1, paramx2) \
{\
int param1 = paramx1;\
int param2 = paramx2;\
if (param1==param2)\
std::cout << "PASS! param1=" << param1 << " param2=" << param2 << std::endl;\
else\
std::cout << "FAIL! param1=" << param1 << " param2=" << param2 << std::endl;\
}
int countCharacters(const char * characters);
int main()
{
char character = '1';
ASSERT_EQUALS(countCharacters("string8\0"), 7);
ASSERT_EQUALS(countCharacters("\0"), 0);
ASSERT_EQUALS(countCharacters(""), 0);
ASSERT_EQUALS(countCharacters(NULL), 0);
ASSERT_EQUALS(countCharacters(&character), 1);
ASSERT_EQUALS(countCharacters('\0'), 0);
return 0;
}
int countCharacters(const char * characters)
{
if (!characters) return 0;
int count = 0;
const char * mySpot = characters;
while (*(mySpot) != '\0')
{
std::cout << "Count=" << count << " mySpot=" << *(mySpot) << std::endl;
count++;
mySpot++;
}
return count;
}
結果:
PASS! param1=7 param2=7
PASS! param1=0 param2=0
PASS! param1=0 param2=0
PASS! param1=0 param2=0
FAIL! param1=2 param2=1
PASS! param1=0 param2=0
再発明したい車輪の数はいくつですか? codereviewのためのサイトがあります。 –
[単一文字のStrlen関数の動作]の可能な複製](http://stackoverflow.com/questions/35477662/strlen-function-behavior-on-single-character) –
あなたはあなたのcountCharactersを適合させることはできませんこのシナリオに対して機能します。ヌルで終了する文字列か単一の文字が与えられているかどうかを判断する方法はありません。私はあなたがこれを行うことを決めた場合、char *関数をオーバーロードして1を返すことをお勧めします。 – Squidy