문제

나는 "123456789"와 같은 숫자를 가지고 있으며, 계산에 그것들을 사용하려면 각각을 추출해야합니다. 물론 인덱스별로 각 Char에 액세스 할 수는 있지만 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과 함께 사용할 수 있습니다. 문자열뿐만 아니라 입력으로 숯으로 작동해야합니다. (부스트 :: lexical_cast는보다 편리한 구문을위한 또 다른 옵션입니다)

(Atoi는 기존 C 함수이며 일반적으로 가능한 경우보다 유연하고 Typeafe 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;
}

만약 너라면 ~이다 인코딩에 대해 걱정하면 언제든지 스위치 문을 사용할 수 있습니다.

많은 숫자를 유지하는 형식에주의하십시오. 일부 시스템의 정수의 최대 크기는 65,535 (32,767 서명)만큼 낮습니다. 다른 시스템, 당신은 2,147,483,647 (또는 4,294,967,295 Unsigned)을 가지고 있습니다.

다음과 같은 방법에 문제가 있습니까?

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로 쉽게 변환 할 수 있습니다.

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 말한다 :

문자가 숫자가 아닌 경우 숫자의 숫자 값을 반환하거나 -1을 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top