문자열을 int로 변환합니다 (그러나 실제로 int 인 경우에만)
-
19-09-2019 - |
문제
대학에서 나는 우리의 프로그램이 명령 줄 인수에서 문자열이 들어가는 지 여부를 감지하는지 물었다../Program 3.7
). 이제 나는 이것을 어떻게 감지 할 수 있는지 궁금합니다. 예를 들어 입력 a
Atoi가 검출하는 유효하지 않지만 예를 들어 입력합니다. 3.6
유효하지 않아야하지만 ATOI는 이것을 정수로 변환합니다.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc > 1) {
int number = atoi(argv[1]);
printf("okay\n");
}
}
그러나 Argv [1]이 실제로 정수 인 경우에만 인쇄되어야합니다. 내 질문이 분명하기를 바랍니다. 많은 감사합니다.
해결책
살펴보십시오 strtol.
endptr이 null이 아닌 경우 strtol ()는 *endptr에 첫 번째 유효하지 않은 문자의 주소를 저장합니다. 그러나 숫자가 전혀 없다면 strtol ()은 *endptr에 str의 원래 값을 저장합니다. (따라서 *str이 아닌 경우
\0' but **endptr is
0 '반환시 전체 문자열이 유효했습니다.)
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc > 1) {
char* end;
long number = strtol(argv[1], &end, 0);
if (*end == '\0')
printf("okay\n");
}
}
다른 팁
코드에서 어떻게 수행 할 수 있는지 알고 싶다고 가정하면 (실제로 숙제 일 경우 가능) 한 가지 방법은 문자열 측면에서 정수를 구성하는 요소에 대해 생각하는 것입니다. 아마도 아마도 다음과 같습니다.
- 선택 사인, +/-.
- 필요한 숫자.
- 옵션 숫자가 다수 (그러나 오버플로를 조심하십시오).
- 문자열의 끝.
이 사양에서, 당신은 당신을 위해 작업을 수행 할 함수를 작성할 수 있습니다.
이 의사 코드와 같은 것이 좋은 출발입니다.
set sign to +1.
set gotdigit to false.
set accumulator to 0.
set index to 0.
if char[index] is '+':
set index to index + 1.
else:
if char[index] is '-':
set sign to -1.
set index to index + 1.
while char[index] not end-of-string:
if char[index] not numeric:
return error.
set accumulator to accumulator * 10 + numeric value of char[index].
catch overflow here and return error.
set index to index + 1.
set gotdigit to true.
if not gotdigit:
return error.
return sign * accumulator.
그래서 당신의 최선의 선택은입니다 strtof()
http://publib.boulder.ibm.com/infocenter/zos/v1r10/topic/com.ibm.zos.r10.bpxbd00/strtof.htm
int okay = argc>1 && *argv[1];
char* p = argv[1];
int sign = 1;
int value = 0;
if( *p=='-' ) p++, sign=-1;
else if( *p=='+' ) p++;
for( ; *p; p++ ) {
if( *p>='0' && *p<='9' ) {
value = 10*value + *p-'0';
} else {
okay = 0;
break;
}
}
if( okay ) {
value *= sign;
printf( "okay, value=%d\n", value );
}
편집 : 허용 - 및 + 문자
이것을 조밀 한 1 또는 2 라이너로 압축 할 수도 있습니다. 또는 동일한 기능을 가진 라이브러리 기능을 찾을 수 있습니다.)
edit2 : 그냥 재미를 위해 - 이제 숫자를 구문 분석해야합니다.