문자열을 포함하는 treePtr->item.getInvest()
을 정수로 변환하려고합니다. 이것이 가능한가?포인터 문자열을 정수로 변환합니다.
답변
#include <sstream>
// ...
string str(*(treePtr->item.getInvest())); // assuming getInvest() returns ptr
istringstream ss(str);
int the_number;
ss >> the_number;
네, 고맙습니다. –
작동하지만 비효율적입니다. 적어도 하나의 힙 할당이 있고 거기에 자유가 있습니다. 프로그램이 멀티 스레드에 있으면 뮤텍스에 걸릴 수 있습니다. 한 번 또는 수백만 번 이렇게하고 있습니까? –
wilhelmtell : 우리가 C++을 쓰고 있다고해서 모든 것이 클래스가되어야한다는 것을 의미하지는 않습니다. 조숙 한 최적화는 모든 악의 근원일지도 모르지만, 고의적으로 여분의 일을하는 것은 비뚤어집니다. –
strtol()
을 사용하면 스트림을 어지럽게 사용하는 것이 좋습니다. 그것은 당신에게 반환 번호가 유효 여부의 표시를 제공하기 때문에
const char* s = treePtr->item.getInvest();
const char* pos;
long the_number = ::strtol(s,&pos,10);
if(pos!=s)
// the_number is valid
strtol()
더 나은 선택이 될 것입니다. 또한 힙에 할당하지 않으므로 성능이 향상됩니다. 단순히 숫자를 원한다면 오류 대신 0을 받아 들여야한다. atol()
(오류시 0을 반환하는 strtol
주위의 얇은 래퍼)을 사용하면된다.
"strtol을 사용하는 것이 더 낫습니다"... 왜? –
스트림은 "C++ 방식"입니다. C 문자열과 관련된 모든 세부 정보를 얻는 것에 대해 걱정하는 것이 더 좋습니다. – mch
Shmoopty : 공정한 질문입니다. 나는 그 대답에 나의 추론을 덧붙였다. –
당신은 높일 수있는 액세스 권한이있는 경우 :
int number= boost::lexical_cast<int>(treePtr->item.getInvest());
http://stackoverflow.com/questions/1243428/convert-string-to-int-with-bool-fail-in-c/1243444#1243444 – AraK