2013-10-11 12 views
3

안녕 난 C에 새로운 오전를 사용하여 ++ 및 할당을하려고하지 않고 int로 누군가가 문자열로 2 값을 읽은 다음 int로 변환하기 위해 stoi() 또는 atoi()를 사용하기 전에 도움을 요청했습니다. 이것은 컴파일 할 때 "-std = C++ 11"매개 변수를 사용해야하는 경우를 제외하고는 훌륭하게 작동합니다. 그렇지 않으면 오류가 반환됩니다. 이것은 "-std = C++ 11"을 처리 할 내 컴퓨터의 문제는 아니지만 불행히도 내 프로그램을 제시해야하는 컴퓨터에는이 옵션이 없습니다.C++ 문자열은 atoi 함수() 또는 stoi()

가 만약 내가 문자열이 그 stoi 또는 atoi 함수를 사용하지 않는 int로 변환 할 수있는 또 다른 방법은?

여기에 지금까지 내 코드입니다.

while (getline(inputFile, line)) 
{ 
    stringstream linestream(line); 

    getline(linestream, Surname, ','); 
    getline(linestream, Initial, ','); 
    getline(linestream, strnum1, ','); 
    getline(linestream, strnum2, ','); 
    number1 = stoi(strnum1); 
    number2 = stoi(strnum2); 

    dosomethingwith(Surname, Initial, number1, number2); 
} 
+0

먼저, 'atoi'에는'-std = C++ 11 '이 필요하지 않습니다. 하지만 오류 검사를 허용하지 않기 때문에'atoi'를 피할 것입니다. 더 나은 해결책은'strtoi '일 것이다. –

+0

그리고'stringstream'을 사용하는 데있어서이 매니아는 무엇입니까? 당신이 원하는 것은'istringstream'입니까? (나는 항상 그것을보고 누구가 그것을 할 것인가를 이해하지 못한다.) –

+0

또한'istringstream' 대신에'boost :: split'과 같은 것을 사용할 것입니다. 'int'로 변환하는 문제는 여전히 열려 있습니다). –

답변

0

이미 "기능"을 제공하는 stringstream을 사용하고 있습니다.

void func() 
{ 
    std::string strnum1("1"); 
    std::string strnum2("2"); 
    int number1; 
    int number2; 
    std::stringstream convert; 

    convert << strnum1; 
    convert >> number1; 

    convert.str(""); // clear the stringstream 
    convert.clear(); // clear the state flags for another conversion 

    convert << strnum2; 
    convert >> number2; 
} 
+0

복잡 할 때 왜 단순합니까? 양방향'stringstream'은 필요하지 않습니다. 올바른 문자열로 초기화 된'istringstream'을 사용하십시오. –

4

자신 만의 stoi 기능을 쓸 수 있다고 생각합니다. 여기 내 코드입니다. 테스트 해본 결과 매우 간단합니다.

long stoi(const char *s) 
{ 
    long i; 
    i = 0; 
    while(*s >= '0' && *s <= '9') 
    { 
     i = i * 10 + (*s - '0'); 
     s++; 
    } 
    return i; 
} 
+2

첫째, 그는'char const *'가 아니라 'std :: string'을 가지고 있습니다. 둘째, 이러한 함수는 유용 할 경우 더 많은 오류 검사가 필요합니다. –