C语言 如何将字符串转换为几个整数

bvuwiixz  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(139)

我有一个任务。用户必须以这种格式输入3个数字(x; y;z)。

X,y,z是3个用分号分隔的整数。程序像字符串一样获取它们,并将它们转换为3个独立的整数。
**输入:**22; 33;55
输出:
数字1= 22
数字2= 33
数字3= 55

最好的方法是使用字符串,因为我必须验证输入的数据是否正确。

jw5wzhpr

jw5wzhpr1#

简单吗?
第一个

fnx2tebb

fnx2tebb2#

以下是@MarcoBonelli想法的实现:

#include <stdio.h>

int main(void) {
    int number[3];
    sscanf("22;33;55", "%d;%d;%d", number, number + 1, number + 2);
    printf("number 1: %d, number 2: %d, number 3: %d\n", number[0], number[1], number[2]);
}

和输出:

number 1: 22, number 2: 33, number 3: 55

如果你想写一个解析器,它会更详细,但通用,易于扩展(在这个例子中解析语法:l(;l)*,其中l是长整数,;是分隔符)。它还说明了如何使用strtol()

#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

const char *parse_ch(const char *s, char ch) {
    if(!s || *s != ch)
        return NULL;
    return s+1;
}

const char *parse_long(const char *s, long *l) {
    if(!s)
        return NULL;
    char *endptr;
    *l = strtol(s, &endptr, 10);
    if((*l == LONG_MIN || *l == LONG_MAX) && errno == ERANGE)
        return NULL;
    return endptr;
}

int main(void) {
    const char *s = "22;33;55";
    long l;
    s = parse_long(s, &l);
    if(!s) return 1;
    printf("number: %ld\n", l);
    for(;;) {
        s = parse_ch(s, ';');
        if(!s) return 0;
        s = parse_long(s, &l);
        if(!s) return 1;
        printf("number: %ld\n", l);
    }
}

相关问题