将字符串拆分为结构的元素
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);
}
作为 str
值 4-a-6
的结果,此示例打印错误
Invalid input: 4-a-6
我有一个结构定义如下
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);
}
作为 str
值 4-a-6
的结果,此示例打印错误
Invalid input: 4-a-6