检测行是否与格式匹配-在C中
我有一个文件,我需要检查它的行是否为以下格式: 姓名:姓名1,姓名2,姓名3,姓名4 (一些字符串,后跟“:”,然后是一个空格,后面是用“,”)分隔的字符串 我尝试使用以下代码执行此操作:检测行是否与格式匹配-在C中,c,C,我有一个文件,我需要检查它的行是否为以下格式: 姓名:姓名1,姓名2,姓名3,姓名4 (一些字符串,后跟“:”,然后是一个空格,后面是用“,”)分隔的字符串 我尝试使用以下代码执行此操作: int result =0; do { result =sscanf(rest,"%[^:]: %s%s", p1,p2,p3); if(result==3) { printf("invalid!"); fclose(fpointer);
int result =0;
do
{
result =sscanf(rest,"%[^:]: %s%s", p1,p2,p3);
if(result==3)
{
printf("invalid!");
fclose(fpointer);
return -1;
}
}while (fgets(rest ,LINE , fpointer) != NULL);
这适用于以下行:name:name1、name2(name1和name2之间有空格)
但它失败的原因如下:
姓名:姓名1,姓名2
我想告诉sscanf,不要在“:”之前避开这个空白
有人能看出来吗
谢谢你的帮助 这对我很有用:
result = sscanf(rest,"%[^*:]: %[^,],%s", p1, p2, p3);
请注意,
*
用于使用空格(如果有)。可能%[^,]
有助于查找非逗号序列(前面有空格以跳过可选空格)。如果需要处理3、4、5……个名称,您还需要能够重复扫描。那么,你的实际需求是什么呢?(一些字符串,后跟“:”,然后是一个空格,之后是用“,”)分隔的字符串-也许您应该重写它,在每个分隔符之间包含“一个或多个空格”。函数族不是一般解析的理想候选函数。相反,您可能希望使用搜索冒号“”:”
,然后使用sscanf
提取其他两个字符串。建议您可以使用strtok()进行解析。问题是之前有一个空格:“在您的解决方案中,似乎也有两个以上的名称以“,”分隔。”如果在“:”之前有空格,则这不是合法的一行:“您希望在%[^,]
术语前面有一个空格,以跳过冒号后面的前导空格。%c
、%[…]
或%n
均不跳过空格;所有其他转换都可以。