string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;
출력이 7 일 것으로 예상했지만 대신 55가되었습니다. 다른 게시물을 통해 검색했습니다. 그들은이 방법을 아무런 문제없이 사용했습니다. 문제가 내 경우에 어디 있는지 알 수 없습니다. 도움을 주셔서 감사합니다.문자열을 int로 캐스팅 한 결과가 잘못되었습니다. C++
string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;
출력이 7 일 것으로 예상했지만 대신 55가되었습니다. 다른 게시물을 통해 검색했습니다. 그들은이 방법을 아무런 문제없이 사용했습니다. 문제가 내 경우에 어디 있는지 알 수 없습니다. 도움을 주셔서 감사합니다.문자열을 int로 캐스팅 한 결과가 잘못되었습니다. C++
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'은 정확한 ans를 만들기 위해 여기에서 무엇을 하는가? – user2341380
user2341380, ASCII 값 표를 보면 '0', '1', '2', '3', '4' '...의 값은 48이고, 49, 50, 51 ... 48 (''0 '')에서 51 (''3 '')을 뺄 때 3이됩니다. 모든 ASCII 숫자에 사용할 수 있습니다. – Patashu
''0 ''은 문자 리터럴이고 48의 ASCII 값을가집니다. 연산이 적어도 char 형의 피연산자 중 하나에 적용되면, integral promotion이 적용됩니다. 즉, '0'은 48로 변환됩니다. '0'에서 '9'까지의 문자 값은 48에서 53 사이입니다 (지금 받으시겠습니까?)? – 0x499602D2
문자 '7'은 대괄호로 표시되며 ASCII 코드는 55 (48 + 7)입니다.
문제는 당신이 test[3]
를 할당한다는 것입니다 int
유형의 변수로 변환하여 실제 문자 코드 (55)가 표시된 문자 ('7'
) 대신 인쇄되도록합니다. 인쇄하기 전에 int
을 char
또는 static_cast
으로 바꾸십시오.
"캐스팅"하지 않으면 "변환"합니다.
당신은 문자열 값으로 변환하기 위해 다른 기능들 sscanf를(), atoi 함수()를 사용할 수 있습니다
int iret = sscanf (test, "%d", &a);
시험의 값을 [3] ASCII 문자 인 '7', 어떤 실제로는 정수 "55"입니다.
추 신 : "sscanf()"의 장점은 "iret! = 1"을 확인하여 구문 분석 오류가 발생했는지 쉽게 감지 할 수 있다는 것입니다.
atoi :
int atoi (const char * str); // 문자열 예를 들어
정수로 변환 :
string test;
test="3527523";
const char c = test[3];
int a=atoi(&c);
std::cout<<a<<std::endl;
'i'는 3527523과 같습니다. 원하는 게 아닙니다. – 0x499602D2
C 문자열이 필요합니다. OP의 코드에서 시도한 것처럼 OP 코드는 한 자리 값을 얻지 못합니다. – cHao
당신이 시도 할 수 : 테스트 [atoi 함수를 (http://www.cplusplus.com/reference/cstdlib/atoi/) –
값 [3]은 '7'이 아닙니다. 7. ASCII 문자 '7'은 55로 평가됩니다. http://www.cpptutor.com/imgs/ascii_table.gif를보십시오 – typ1232
'int a = test [3]'대신 :'int a = test [3] - '0'. 그러면 '7'이 인쇄됩니다. – yasouser