C 检测特定格式的子字符串

C 检测特定格式的子字符串,c,string,format,substring,C,String,Format,Substring,检测特定格式的子字符串的最简单方法是什么 例如,考虑c中的字符串 "[random characters/symbols] a-b-c [random characters/symbols]" C中是否有一个函数允许我检测%s-%s-%s格式的子字符串?如果要检测没有模式匹配的文本字符串,请使用strchr或strnchr。函数strnchr更好,因为您可以指定一个最大长度来保护缺少空终止符的字符串;但是,它不是ANSI,所以不是所有语言都有它。如果使用strchr,请确保防止丢失空终止符 可

检测特定格式的子字符串的最简单方法是什么

例如,考虑c

中的字符串
"[random characters/symbols] a-b-c [random characters/symbols]"

C中是否有一个函数允许我检测%s-%s-%s格式的子字符串?

如果要检测没有模式匹配的文本字符串,请使用strchr或strnchr。函数strnchr更好,因为您可以指定一个最大长度来保护缺少空终止符的字符串;但是,它不是ANSI,所以不是所有语言都有它。如果使用strchr,请确保防止丢失空终止符

可以使用regcomp对字符串执行正则表达式搜索。
请参见尝试从字符串中的各个点开始,直到成功

%*[^-]查找不包含“-”或空格的子字符串

%n在扫描中记录偏移量

#include<stdio.h>

int main(void) {
  char *s = "[random characters/symbols] a-b-c [random characters/symbols]";

  while (*s) {
    int n = 0;
    sscanf(s, "%*[^- ]-%*[^- ]-%*[^- ]%n", &n);
    if (n) {
      printf("Success '%.*s'\n", n, s);
      break;
    }
    s++;
  }
  return 0;
}

你是说类似正则表达式的东西?“-”扫描到%s。您希望%s不包含“-”吗?``%s`包含所有非空格的字符。随机字符和符号是否包含空格?a-b-c部分中的字符是否按所示空格与随机材料分开?你在找三个小写字母吗?三封信?字母数字法?您需要调用代码中与a、b和c对应的值吗?您可能应该使用%c或%1s来避免前%s吃掉所有的非空白,从而使转换在-上失败。根据定义,字符串不缺少空终止符;字符串以空字节结尾。某些应为字符串的字节序列不是字符串,因为包含字节的数组中的数据缺少null终止符,但此类字节序列不是字符串。C标准第7.1.1节术语定义中的第一句话是:字符串是以第一个空字符结尾并包含该空字符的连续字符序列。字符串以null结尾-句号.yes,这是定义;但是,语言中没有任何东西可以强制它,当它发生时,发现它是痛苦的。你可以要求所有你想要的语义;但是,如果您不考虑代码中缺失的null终止符,则可能会导致不稳定。作为一名软件开发人员,我们负责功能、稳定性和可维护性,而不是确保我的花括号放在正确的位置。有趣的方法,我必须记住这一点。
Success 'a-b-c'