将字符串拆分为结构的元素

Splitting a string into elements of a struct

我有一个结构定义如下

struct gtid{
   int id1;
   int id2;
   int num;
 }

如何转换“1-2-3”形式的字符串并相应地初始化结构

  gtid -> id1 = 1;
  gtid -> id2 = 2;
  gtid -> num = 3;

或者如何将字符串转换为适当的结构。

您可以使用 scanf 函数从 stdin 中读取格式化值,使用 sscanf 函数从字符串中读取格式化值。请参阅下面的完整示例。

#include  <stdio.h>

typedef struct {
    int id1;
    int id2;
    int num;
} gtid_t;

int main(void) {
    gtid_t gtid;

    // read from stdin
    scanf("%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num));
    printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num);

    // read from string
    char* str = "4-5-6";
    sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num));
    printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num);

    return 0;
}

输出如下

id1 = 1, id2 = 2, num = 3
id1 = 4, id2 = 5, num = 6

正如@DavidC.Rankin 在评论中提到的,最好检查输入是否成功。您可以像这样添加 if 语句

if(sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)) != 3) {
    fprintf(stderr, "Invalid input: %s\n", str);
}

作为 str4-a-6 的结果,此示例打印错误

Invalid input: 4-a-6