단일 문자를 정수로 변환하는 방법
예를 들어 "123456789"와 같은 숫자 문자열이 있으며 계산에 사용하기 위해 각각을 추출해야합니다. 물론 인덱스로 각 문자에 액세스 할 수 있지만 어떻게 int로 변환합니까?
atoi ()를 살펴 봤지만 문자열을 인수로 사용합니다. 따라서 각 문자를 문자열로 변환 한 다음 atoi를 호출해야합니다. 더 좋은 방법이 있습니까?
숫자에 대한 문자 인코딩이 모두 48 ( '0')에서 57 ( '9')의 순서로되어 있다는 사실을 활용할 수 있습니다. 이것은 ASCII, UTF-x 및 거의 모든 다른 인코딩에 적용됩니다 (이에 대한 자세한 내용은 아래 주석 참조 ).
따라서 모든 숫자의 정수 값은 숫자 마이너스 '0'(또는 48)입니다.
char c = '1';
int i = c - '0'; // i is now equal to 1, not '1'
동의어이다
char c = '1';
int i = c - 48; // i is now equal to 1, not '1'
그러나 첫 번째가 c - '0'
훨씬 더 읽기 쉽습니다.
#define toDigit(c) (c-'0')
또는 원래 atoi 접근 방식과 유사하지만 대신 std :: stringstream을 사용하는 "올바른"방법을 사용할 수 있습니다. 그것은 문자뿐만 아니라 입력으로도 작동합니다. (boost :: lexical_cast는 더 편리한 구문을위한 또 다른 옵션입니다)
(atoi는 오래된 C 함수이며 일반적으로 가능하면 더 유연하고 형식이 안전한 C ++ 등가물을 사용하는 것이 좋습니다. std :: stringstream은 문자열과의 변환을 다룹니다)
atoi () 함수를 사용할 수 있습니다.
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]){
int num ;
num = atoi(argv[1]);
printf("\n%d", num);
}
제공된 답변은 아라비아 숫자 만 처리하고 해당 숫자가 순차적이고 ASCII와 동일한 위치에있는 인코딩으로 작업하는 한 훌륭합니다.
거의 항상 그렇습니다.
그렇지 않은 경우 적절한 라이브러리가 필요합니다.
ICU 부터 시작하겠습니다 .
- 먼저 바이트 문자열을 유니 코드 문자열로 변환합니다. (독자를위한 연습으로 왼쪽).
- 그런 다음 uchar.h 를 사용 하여 각 문자를 확인합니다.
- 우리 캐릭터가
UBool u_isdigit (UChar32 c)
- 다음 값은
int32_t u_charDigitValue ( UChar32 c )
아니면 ICU가 당신을 위해 할 수있는 어떤 기능을 가지고있을 수도 있습니다. 자세히 살펴 보지 않았습니다.
#include<iostream>
#include<stdlib>
using namespace std;
void main()
{
char ch;
int x;
cin >> ch;
x = char (ar[1]);
cout << x;
}
인코딩 이 걱정 된다면 언제든지 switch 문을 사용할 수 있습니다.
큰 숫자를 유지하는 형식에주의하십시오. 일부 시스템에서 정수의 최대 크기는 65,535 (부호 32,767)만큼 낮습니다. 다른 시스템에는 2,147,483,647 (또는 4,294,967,295 서명되지 않음)이 있습니다.
다음과 같은 방법으로 문제가 있습니까?
int CharToInt(const char c)
{
switch (c)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
default:
return 0;
}
}
이렇게하면 char를 int로, int를 char로 쉽게 변환 할 수 있습니다.
int charToInt(char c)
{
int arr[]={0,1,2,3,4,5,6,7,8,9};
return arr[c-'0'];
}
나를 위해 다음은 아주 잘 작동했습니다.
QChar c = '5';
int x = c.digitValue();
// x is now 5
문서 : INT QChar :: digitValue () const를 하는 말한다 :
Returns the numeric value of the digit, or -1 if the character is not a digit.
ReferenceURL : https://stackoverflow.com/questions/439573/how-to-convert-a-single-char-into-an-int
'developer tip' 카테고리의 다른 글
GET 요청을 수행하고 Querystring을 작성하십시오. (0) | 2021.01.09 |
---|---|
OS의 제한을 초과하여 키 반복률을 높이려면 어떻게해야합니까? (0) | 2021.01.09 |
TextBox 입력 제한을 정의하는 방법은 무엇입니까? (0) | 2021.01.09 |
주어진 날짜 이후 첫 번째 월요일의 날짜 찾기 (0) | 2021.01.09 |
Doctrine2 쿼리에서 제한 및 오프셋 사용 (0) | 2021.01.09 |