일부 C++에서 쓸어 버렸으므로 해결하려고하는 문제 중 하나는 문자 포인터의 문자 수를 계산하여 예상 한 것과 비교하여 확인하는 것입니다. 그러나 내 솔루션에서, 나는 특별한 결과를 발견했다. 내 함수에 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를 적용 할 수 없습니다 기능을이 시나리오에 적용합니다. null로 끝나는 문자열이나 단일 문자가 주어 졌는지 알 수있는 방법이 없습니다. 이 일을 할 때 가장 좋은 방법은 char * 함수를 오버로드하여 1을 반환하는 것입니다. – Squidy