2013-05-11 3 views
1
string test; 
test="3527523"; 
int a=test[3]; 
std::cout<<a<<std::endl; 

출력이 7 일 것으로 예상했지만 대신 55가되었습니다. 다른 게시물을 통해 검색했습니다. 그들은이 방법을 아무런 문제없이 사용했습니다. 문제가 내 경우에 어디 있는지 알 수 없습니다. 도움을 주셔서 감사합니다.문자열을 int로 캐스팅 한 결과가 잘못되었습니다. C++

+1

당신이 시도 할 수 : 테스트 [atoi 함수를 (http://www.cplusplus.com/reference/cstdlib/atoi/) –

+6

값 [3]은 '7'이 아닙니다. 7. ASCII 문자 '7'은 55로 평가됩니다. http://www.cpptutor.com/imgs/ascii_table.gif를보십시오 – typ1232

+1

'int a = test [3]'대신 :'int a = test [3] - '0'. 그러면 '7'이 인쇄됩니다. – yasouser

답변

6

test[3]은 정수로 변환되는 char을 반환하므로 문자의 ASCII 값을 반환합니다. 3 (ASCII)은 55입니다.

대신 a의 유형으로 char을 사용해보십시오 :

char a = test[3]; 

std::cout << a; // 3 

당신은 '0'에서 문자를 빼기, 정수로 결과를 원하는 경우

std::string test = "3527523"; 

int a = test[3] - '0'; 

std::cout << a; // 3 
+0

도움을 많이 주셔서 감사합니다. 나는 정말 바보 같은 질문을했다는 것을 알고있다 그래서 '0'은 정확한 ans를 만들기 위해 여기에서 무엇을 하는가? – user2341380

+0

user2341380, ASCII 값 표를 보면 '0', '1', '2', '3', '4' '...의 값은 48이고, 49, 50, 51 ... 48 (''0 '')에서 51 (''3 '')을 뺄 때 3이됩니다. 모든 ASCII 숫자에 사용할 수 있습니다. – Patashu

+0

''0 ''은 문자 리터럴이고 48의 ASCII 값을가집니다. 연산이 적어도 char 형의 피연산자 중 하나에 적용되면, integral promotion이 적용됩니다. 즉, '0'은 48로 변환됩니다. '0'에서 '9'까지의 문자 값은 48에서 53 사이입니다 (지금 받으시겠습니까?)? – 0x499602D2

0

문자 '7'은 대괄호로 표시되며 ASCII 코드는 55 (48 + 7)입니다.

0

문제는 당신이 test[3]를 할당한다는 것입니다 int 유형의 변수로 변환하여 실제 문자 코드 (55)가 표시된 문자 ('7') 대신 인쇄되도록합니다. 인쇄하기 전에 intchar 또는 static_cast으로 바꾸십시오.

0

"캐스팅"하지 않으면 "변환"합니다.

당신은 문자열 값으로 변환하기 위해 다른 기능들 sscanf를(), atoi 함수()를 사용할 수 있습니다

int iret = sscanf (test, "%d", &a);

시험의 값을 [3] ASCII 문자 인 '7', 어떤 실제로는 정수 "55"입니다.

추 신 : "sscanf()"의 장점은 "iret! = 1"을 확인하여 구문 분석 오류가 발생했는지 쉽게 감지 할 수 있다는 것입니다.

0

atoi :

int atoi (const char * str); // 문자열 예를 들어

정수로 변환 :

string test; 
test="3527523"; 
const char c = test[3]; 
int a=atoi(&c); 
std::cout<<a<<std::endl; 
+0

'i'는 3527523과 같습니다. 원하는 게 아닙니다. – 0x499602D2

+0

C 문자열이 필요합니다. OP의 코드에서 시도한 것처럼 OP 코드는 한 자리 값을 얻지 못합니다. – cHao