0

我想问它怎么不能从字符串中获取整数

例如,这是我的代码:

int main() {
    char str[] = "ababbababa-1998";
    int nr = atoi(str);
    printf("%d\n", nr);
    return (EXIT_SUCCESS);
}

运行时,它打印出 0 但不是 1998,我该如何解决?

4

4 回答 4

1

在您的情况下,您可以使用strtok

int main() {
    char str[] = "ababbababa-1998";
    char * const first_part = strtok(str, "-");
    if (first_part == NULL) {
        return 1;
    }
    char * const second_part = strtok(NULL, "-");
    if (second_part == NULL) {
        return 1;
    }
    int nr = atoi(second_part);
    printf("%d\n", nr);
    return 0;
}

你可以看看为什么stdlib.h中没有strtoi?用于错误检查atoi。

于 2016-12-01T04:48:07.837 回答
1

继续往下走,直到str()代码使用.strtol()

int main() {
    char str[] = "ababbababa-1998";
    char *p = str; 

    char *endptr;
    while (*p) {
      long number = strtol(p, &endptr, 10);
      // Was conversion successful?
      if (endptr != p) {
        printf("%ld\n", number);
        return EXIT_SUCCESS;
      }
      p++;
    }
    puts("No conversion");
    return EXIT_FAILURE;
}
于 2016-12-01T05:07:49.220 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define ASCII '0'

int
main(void) {
    char const str[] = "ababbababa-1998";
    int i, result = 0;

    for (i = 0; str[i]; i++) {
        if (isdigit(str[i])) {
            result *= 10;
            result += str[i] - ASCII;
        }
    }

    printf("number = %d\n", result);

    return 0;
}
于 2016-12-01T04:57:55.700 回答
0

如果你想从一个字符串中提取所有的数字,你可以使用我创建的这个函数。

您将需要这些头文件才能使此功能正常工作。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void getNumbers(char data[]) {
   int index = 0;
   char current;

   for( int i = 0; i < strlen(data); ++i ) {
      current = data[i];
      if (current >= 48 && current <= 57) {
         data[index++] = current;
      }
   }
    data[index] = '\0';
}

您可以像这样使用上述功能。


char foobar[] = "1A2B3C4D5E6F7G8H9I";

getNumbers(foobar);

printf("%s", foobar);

上面的代码会输出123456789

于 2019-08-25T05:28:51.817 回答