logo

C에서 문자열을 int로 변환

문자열을 int로 변환하는 것은 프로그래밍 세계에서 반복되는 작업입니다. 간단한 작업임에도 불구하고 많은 코더는 이 작업을 수행하는 동안 실패하거나 혼란스러워합니다. 변환은 대부분 문자열로 저장된 숫자에 대한 작업을 수행할 수 있도록 수행됩니다.

예:



str=163″

번호=163

C는 강력한 형식의 언어입니다. 데이터 유형에 허용되지 않는 값을 입력하려고 하면 오류가 발생합니다. 입력뿐만 아니라 작업을 수행하는 동안에도 오류가 발생합니다.



문자열을 int로 변환하는 방법에는 다음과 같은 3가지 방법이 있습니다.

    atoi( ) 사용 루프 사용 sscanf() 사용

1. atoi( )를 이용한 문자열 변환

C의 atoi() 함수는 문자 배열이나 문자열 리터럴을 인수로 사용하여 해당 값을 반환합니다. 정수 . 이는 다음에서 정의됩니다. 헤더 파일.

관찰한다면 끌고 가다() 좀 더 가까이 다가가면 이것이 다음을 의미한다는 것을 알게 될 것입니다:



간단한 용어로 atoi() 분석

간단한 용어로 atoi() 분석

예:

부분 파생 기호 라텍스




// C program to demonstrate the> // functioning of the atoi() function> #include> #include> int> main()> {> >char>* str1 =>'141'>;> >char>* str2 =>'3.14'>;> > >// explicit type casting> >int> res1 =>atoi>(str1);> >// explicit type casting> >int> res2 =>atoi>(str2);> > >printf>(>'atoi(%s) is %d '>, str1, res1);> >printf>(>'atoi(%s) is %d '>, str2, res2);> > >return> 0;> }>

>

>

산출

atoi(141) is 141 atoi(3.14) is 3>

Atoi는 문자열에 대해 약간 다르게 동작합니다. 방법을 확인해 봅시다:

예:




// C Program to implement> // Atoi function with char array> #include> #include> > int> main()> {> >char>* str1 =>'Geek 12345'>;> >char>* str2 =>'12345 Geek'>;> > >int> num1 =>atoi>(str1);> >int> num2 =>atoi>(str2);> > >printf>(>'%d is of '%s' '>, num1, str1);> >printf>(>'%d is of '%s' '>, num2, str2);> > >return> 0;> }>

>

>

산출

0 is of 'Geek 12345' 12345 is of '12345 Geek'>

설명:

  • Geek 12345 여기서는 'Geek'이 첫 번째 단어이므로 대답은 다음과 같습니다. 0(숫자 없음)
  • 12345 여기 괴짜 '12345'가 첫 번째 단어이므로 대답은 12345입니다.

2. 루프 사용

루프를 사용하면 문자열의 각 요소를 하나씩 탐색하고 숫자 문자를 ASCII 값과 비교하여 숫자 값을 얻고 정수를 생성하기 위해 일부 수학을 사용하여 문자열을 정수로 변환할 수 있습니다. 아래 예에서는 이를 수행하는 방법을 보여줍니다.

예:




// C Program to convert string> // into integer using for loop> #include> #include> > int> main()> {> >char>* str =>'4213'>;> >int> num = 0;> > >// converting string to number> >for> (>int> i = 0; str[i] !=>' '>; i++) {> >num = num * 10 + (str[i] - 48);> >}> > >// at this point num contains the converted number> >printf>(>'%d '>, num);> >return> 0;> }>

>

>

산출

4213>

참고: 숫자 문자를 숫자 값으로 변환하기 위해 str[i] – 48을 사용했습니다. 예를 들어 문자 '5'의 ASCII 값은 53이므로 숫자 값은 53 – 48 = 5입니다.

3. sscanf() 사용

sscanf()를 사용하면 문자열을 정수로 쉽게 변환할 수 있습니다. 이 함수는 문자열에서 형식화된 입력을 읽습니다.

sscanf 구문:

int sscanf (const char * source, const char * formatted_string, ...);>

매개변수 :

    소스 – 소스 문자열. formatted_string – 다음을 포함하는 문자열 형식 지정자 . … : – 입력 데이터를 저장하려는 변수의 주소가 포함된 변수 인수 목록입니다.

이러한 인수는 최소한 형식 지정자에 의해 저장된 값 수만큼 있어야 합니다. 성공하면 함수는 채워진 변수의 수를 반환합니다. 입력이 실패한 경우 데이터를 성공적으로 읽기 전에 EOF가 반환됩니다.

예:




// C program to demonstrate> // the working of SSCANF() to> // convert a string into a number> #include> > int> main()> {> >const> char>* str1 =>'12345'>;> >const> char>* str2 =>'12345.54'>;> >int> x;> > >// taking integer value using %d format specifier for> >// int> >sscanf>(str1,>'%d'>, &x);> >printf>(>'The value of x : %d '>, x);> > >float> y;> >// taking float value using %f format specifier for> >// float> >sscanf>(str2,>'%f'>, &y);> >printf>(>'The value of x : %f '>, y);> > >return> 0;> }>

>

>

산출

The value of x : 12345 The value of x : 12345.540039>

String을 int로 타입캐스트할 수 있나요?

정답은 아니요 . 문자열을 숫자로 변환하기 위해 타입 캐스팅을 사용하면 아래 예와 같이 오류가 발생합니다.

예:




// C Program to check the output> // of typecasting from string to integer> #include> > int> main()> {> >string str =>'8'>;> >int> num;> > >// Typecasting> >num = (>int>)str;> >return> 0;> }>

>

>

산출:

main.c: In function ‘main’: main.c:9:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 9 | num = (int)str; | ^ 1683652612>

설명: 둘 다로서 문자열과 int가 동일한 개체 계층 구조에 있지 않습니다. , 우리 암시적 또는 명시적 유형 캐스팅을 수행할 수 없습니다. double을 int로 변환하거나 float를 int로 변환하는 경우에 할 수 있는 것처럼 말입니다.

위 코드에서 출력 결과에 가비지 값이 포함되어 경고가 표시되는 것을 볼 수 있습니다. 따라서 이러한 상황을 피하기 위해 위에서 설명한 방법을 사용합니다.