2013-04-24 4 views
1

숫자가 포함될 수있는 input 배열이 있습니다. 나는 어디 배열에 나타납니다 (나타나는 경우) : : 후. (앞으로의 입력에는 여러 개의 숫자가 포함될 수 있으며 각 문자 뒤에는 :).C 스타일 문자열의 일부를 int로 변환합니다.

새 배열을 만든 다음 input에서 내 토큰부터 시작하여 새 배열로 복사 할 수 있습니다. 문자를 읽는 동안 계속해서 0-9을 읽습니다. 그런 다음 새 배열에서 atoi으로 전화합니다.

atoi(array, start, end)을 말하면 내 번호가 포함 된 배열 부분 만 변환하고 copy-to-new-array 루프가 필요하지 않으면 다소 간단합니다.

atoi function 과부하가 표시되지 않습니다.

C 스타일 문자열의 일부만을 내 자신의 글을 쓰지 않는 숫자로 변환하는 쉬운 방법이 있습니까 atoi(const char * str, int start, int end)?

+2

가 C에는'overloading' 없다 ... –

+1

을 - 숫자 문자. –

답변

2

:

코드를

char* str = ":12 sdfsdf :45:18"; 
char* p = str; 
while (*p) 
{ 
    if (*p++ == ':') 
     printf("%d\n", strtoul(p, &p, 10)); 
} 

출력을

12 
45 
18 

See the codepad

,451,515,

atoi 함수 버전

이 atoi 함수 (codepad)를 사용하여 수도 있습니다 먼저 비에 대한 포인터를 반환 : 당신은 strtol`은`사용할 수 있습니다

char* str = ":12 sdfsdf :45:18"; 
char* p = str; 
while (*p) 
{ 
    if (*p++ == ':') 
     printf("%d\n", atoi(p)); 
} 
3

대신 strtoul을 사용하십시오. 시작 주소를 색인으로 조정하거나 오프셋하면됩니다. 출력 포인터는 파싱이 끝난 곳을 알려줍니다.

0

아니요, 그런 기능을 알지 못합니다.

그러나, 자신의 atoi 함수를 작성하면 해당 어렵지 않다 또한 C.

에는 오버로드

없습니다.

int atoi_se(const char * str, int start, int end) { 
    char* startPtr = str+start; 
    char* endPtr = str+end; 
    char savedChr = *endPtr; 
    *endPtr = '\0'; 
    int retVal = strtol(startPtr, NULL, 10); 
    *endPtr = savedChr; 
    return retVal; 
} 

참고 : 이러한 기능에 필요한 방어 코딩은 생략했습니다.

0

atoi은 정상적으로 작동합니다. 그냥 시작 위치 (전체 input 어레이가 아닌)로 전달하면되도록 많은 숫자를 읽습니다. 숫자 뒤에 오는 다른 문자는 무시됩니다. D.Shawley에 의해 제안, 다음을 수행 할 수 strtoul를 사용

관련 문제