2012-11-04 8 views
1

이진 문자열의 개별 문자에 액세스하는 데 문제가있어 설정 여부를 확인하지 못했습니다. 무엇이 잘못 되었나요? 아니면 더 쉬운 방법이 있습니까?문자열 요소에 어떻게 액세스합니까?

#include <iostream> 
#include <string> 

using namespace std; 

float BinToDec(const string & bin) { 
    short length = bin.length(); 
    float result = 1.0f; 

    const char * str = bin.c_str(); 

    for (int i = 0; i < length; ++i) { 
     if (&str[i] == "1") cout << "SET" << endl << endl; 
     else cout << "NOT SET" << endl << endl; 
    } 

    return result; 
} 

int main() { 

    string bin = ""; 

    cout << "Input a binary number: "; 
    cin >> bin; 

    cout << BinToDec(bin) << endl << endl; 

} 
+3

시도하십시오 (str [i] == '1') – fonZ

+0

@ Lightness Races in Orbit이 말은 구문 오류 일 뿐이니까요. 게다가 해답을 입력 할 때 나타나는 타임 스탬프를 확인하십시오. – fonZ

+0

@JonathanCruz : 문법 오류 일 뿐이므로 질문 가치가 없습니다.하지만 여기서부터 우리는 질문에 대한 대답이므로 그와 같이 작성되어야합니다. –

답변

2

때문에 당신을 위해 작동하지 않습니다 : 여기에 내 코드 당신이 종류의 캐릭터 "1"와 비교하는 문자열을 얻기 위해 노력하고

  • 하지만 문자열은 종료됩니다 입력 끝 ... 1 문자를 지나갈 수 있습니다. ==
  • 비교 C-문자열은 단지 개별 문자 비교,

대신 포인터 값을 비교 :

if (str[i] == '1') cout << "SET" << endl << endl; 
//^  ^^ 
// |  character literals are delimited by _single_ quotes 
// no `&` required 

하지만 전혀 .c_str()을 사용하는 이유를 이해하지 않습니다를; 단지 대신 C 문자열 str을 만드는 bin에 직접 운항합니다 :

float BinToDec(const string& bin) 
{ 
    size_t length = bin.length(); 
    float result = 1.0f; 

    for (int i = 0; i < length; ++i) { 
     if (bin[i] == '1') 
      cout << "SET" << endl << endl; 
     else 
      cout << "NOT SET" << endl << endl; 
    } 

    return result; 
} 

는 또한 length의 유형을 수정했습니다.

1

당신은 당신이 변경, C 스타일의 문자열이 작업을 수행 하시겠습니까 경우 :

if (&str[i] == "1") cout << "SET" << endl << endl; 

if (str[i] == '1') cout << "SET" << endl << endl; 

당신이 '1'str의 단일 문자를 비교한다 그런 식으로

에 , 리터럴 문자 ( "1" 대신 1자를 포함하는 문자열

기존 코드에서 오프셋 i의 주소를 사용하고 있습니다. 문자 i에서 시작하는 문자열의 끝과 실질적으로 동일한 c_str()에 추가하고 리터럴 문자열 "1"과 비교합니다. 기본 포인터를 비교하므로 C 스타일 문자열 비교를 할 수 없습니다.

0

각 문자의 값을 확인하려고하므로 작은 따옴표를 사용하고 큰 따옴표는 사용하지 마십시오.

float BinToDec(const string & bin) { 
    short length = bin.length(); 
    float result = 1.0f; 

    const char * str = bin.c_str(); 

    char c; 
    for (int i = 0; i < length; ++i) { 
     c = str[i]; 

     // Use single quotes and not double quotes here 
     if (c == '1') cout << "SET" << endl << endl; 
     else cout << "NOT SET" << endl << endl; 
    } 

    return result; 
} 

그렇다면 lccarrasco의 방법은 달성하려는 작업을 수행하는 올바른 방법이라고 생각합니다.

+1

유일한 해결책이 아닌 도움이되는 데모로 코드를 제공하는 해결책에 대한 답을 제시하는 것이 바람직합니다. –

+0

설명이 추가되었습니다. 앞으로 지침을 따를 것입니다. 의견을 감사하십시오. 감사. –

+0

오, 훨씬 좋습니다 - 따 :) –

3
당신은 당신의 문자열 bin에 직접적으로 반복 할 수

, 필요하다 ([]를 사용하여 이미 역 참조하고 char을 얻고 있기 때문에 또한 & 연산자, 여기에 필요하지 않습니다는 const char *를 얻을 수 없습니다 왜 'shouldn 또한

for (int i = 0; i < length; ++i) { 
     if (bin[i] == '1') 
      cout << "SET" << endl << endl; 
     else 
      cout << "NOT SET" << endl << endl; 
} 

하는 short의 길이를 저장하는 작업을 수 있습니다 t 숯불하지만 string literal) 모두

모든, 나는 이것이 더 나은 방법이 될 것이라고 생각하지 않습니다 "1"로 비교 지금은,하지만 strin 최대 값인 short보다 긴 gs가 있으므로 size_t을 사용해야합니다.

관련 문제