代码无法从C中的字符串中获取n位数字

时间:2016-12-01 04:29:12

标签: c string.h

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

例如,这是我的代码:

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

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

4 个答案:

答案 0 :(得分: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;
}

您可以查看Why is there no strtoi in stdlib.h?以查看错误检查。

答案 1 :(得分: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;
}

答案 2 :(得分: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;
}

答案 3 :(得分: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