특정 문자열에서 모든 숫자를 가져 오려고하지만 은 (15, 587, ... exc)와 같이 한 자리 이상 일 수 있습니다. 다음은 내가 직접 만든 코드입니다.C의 문자열에서 N 개의 숫자를 모두 추출하십시오
int firstIndxOfNumb(char* str, int startIndx, int len) {
int i, val;
i = startIndx;
while (str[i] && i < len) {
val = str[i];
if (isdigit(val))
return i;
i++;
}
return -1;
}
int lastIndxOfNumb(char* exp, int len, int indx1){
int i, curr;
for(i = indx1; i < len; i++){
curr = exp[i];
if(!isdigit(curr)){
return --i;
}
}
return 0;
}
int getNumb(char* exp, int len, int* indx1){
int indx2 = lastIndxOfNumb(exp, len, *indx1);
printf("indx1:%d\tindx2:%d\n", *indx1, indx2);
char temp[indx2-*indx1];
strncpy(temp, exp+*indx1, (size_t) (indx2-*indx1+1));
*indx1 = firstIndxOfNumb(exp, indx2+1, len);
return atoi(temp);
}
void main() {
char *s = "())(15*59";
int len = strlen(s);
int indx1;
indx1 = firstIndxOfNumb(s, 0, len);
printf("%d\n", getNumb(s, len, &indx1));
printf("\n%d", getNumb(s, len, &indx1));
}
목표는 두 개의 숫자 (15, 59)를 얻는 것입니다. 첫 번째 호출은 괜찮 았지만 두 번째 값은 "무한 루프"가 아니며 index1 : 7 괜찮음 index2 : 0은 좋지 않습니다! 당신은 ..... 내가 그것을 작동하게
값은 getNum();
기능에 printf(..);
로 인쇄됩니다 .... 다음과 같이
'atoi'대신 'strtoi'를 사용할 수 있습니다. _and_ 읽은 문자 수를 반환합니다. 시간을 절약하십시오. –
문자열에 음수가 없습니까? – BLUEPIXY
@BLUEPIXY있다 –