developer tip

단일 문자를 정수로 변환하는 방법

copycodes 2021. 1. 9. 10:14
반응형

단일 문자를 정수로 변환하는 방법


예를 들어 "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 부터 시작하겠습니다 .

  1. 먼저 바이트 문자열을 유니 코드 문자열로 변환합니다. (독자를위한 연습으로 왼쪽).
  2. 그런 다음 uchar.h사용 하여 각 문자를 확인합니다.
  3. 우리 캐릭터가 UBool u_isdigit (UChar32 c)
  4. 다음 값은 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

반응형