【问题标题】:How do I check if a string is in a certain format如何检查字符串是否为某种格式
【发布时间】:2022-10-23 20:27:31
【问题描述】:

在我正在处理的项目中,我从.txt 文件中导入设置。
为了完成这项工作,我需要验证文本文件的第一行是否以某种格式写入。格式应为%d,%d。 2 个整数,中间有逗号,例如 7,7150,20。我尝试通过以下方式使用sscanfstrcmp 使其工作,但没有运气。

fgets(line, 100, fp);
int s1, s2;

if (!(sscanf(line, "%d,%d", s1, s2))) {
    return 1;
}
if (!(strcmp(line, "%d,%d"))) {
    return 1;
}

关于如何使这项工作的任何建议?

【问题讨论】:

  • pcre 可以胜任
  • 阅读strspn()。 ASCII 数字 - 逗号 - ASCII 数字 - 空终止符。 (也阅读 scanf() 系列函数返回的内容......您做出了错误的假设。)
  • if( !(sscanf(line,"%d,%d", s1, s2)) ) 应该是 if(sscanf(line,"%d ,%d", &s1, &s2) != 2) 注意更改的几个细节。最重要的是& 地址操作符。
  • 困惑于为什么您尝试将输入行(应该是 150,20 与某些格式规范字符串进行比较)。 strcmp 不理解他们。那些"%d" 等格式规范仅适用于像scanfprintf 这样的函数,它们有一些相似但实际上完全不同的规则。
  • @Psi 为此,我认为这可能是矫枉过正。如果您希望这是唯一在线上的东西,也许是if(sscanf(line, " %d,%d %c", &s1, &s2, &syntax_error) != 2)。不要忘记验证行尾。

标签: c string scanf


【解决方案1】:

根据docssscanf() 返回成功写入的变量数或-1 出错。如果返回值小于 2,则无法读取一个或多个变量。

另一个问题是您应该传递指向s1s2 的指针,而不是变量本身。

尝试以下操作:

fgets(line, 100, fp);
int s1, s2;
if (sscanf(line,"%d,%d", &s1, &s2) < 2) {
    return 1;
}

strcmp() 不能在这里使用,因为它不处理占位符。它将测试字符串是否等于文字字符串"%d,%d"

【讨论】:

    猜你喜欢
    • 2013-02-05
    • 2016-06-07
    • 2021-03-19
    • 2012-08-31
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多