【问题标题】:How can I check if a single char exists in a C string?如何检查 C 字符串中是否存在单个字符?
【发布时间】:2012-05-25 23:46:43
【问题描述】:

我想检查单个字符是否在 C 字符串中。字符是'|' 用于Linux中的管道(实际上我也想检查'<''>''>>''&')。

在 Java 中我可以这样做:

String.indexOf()

但是如何在 C 中做到这一点,而不循环整个字符串(char* 字符串)?

【问题讨论】:

  • "|" 是交流字符串,用双引号括起来的任何内容"" 都是一个字符串,无论它有多少个字符。要么你的 Q 标题具有误导性,要么我误解了你的问。
  • @Als:正确,已修复。谢谢!
  • 请注意,'>>' 不是单个字符。在这里您需要一种不同的方法 (strstr)。
  • @undur_gongor:感谢您的提示!

标签: c string char


【解决方案1】:

如果你需要搜索一个字符,你可以使用strchr函数,像这样:

char* pPosition = strchr(pText, '|');

如果没有找到给定的字符,pPosition 将是 NULL。例如:

puts(strchr("field1|field2", '|'));

将输出:“|field2”。请注意strchr 将执行向前 搜索,要搜索向后,您可以使用strrchr。现在想象一下(只是提供一个例子)你有一个这样的字符串:“变量:值|条件”。您可以使用以下方法提取 value 字段:

char* pValue = strrchr(strchr(pExpression, '|'), ':') + 1;

如果您想要的是字符串中字符的 index,请在 SO 上查看 this post。您可能还需要 IndexOfAny() 之类的东西,here 上的另一篇使用 strnspn 的 SO 帖子。

如果您要查找字符串,则可以使用strstr 函数,如下所示:

char* pPosition = strstr(pText, "text to find");

【讨论】:

    【解决方案2】:

    strchr 是你的朋友。

    char *strchr(const char *s, int c);
    

    strchr 函数在 s 指向的字符串。

    strchr 函数返回一个指向所定位字符的指针,如果 字符串中没有出现字符。

    当然,在最坏的情况下,函数必须遍历整个字符串(Java 函数可能会这样做)。

    【讨论】:

    • 常量strchr中,c应为char类型。我想你错误地输入了int。应该是:char *strchr(const char *s, char c);
    • @Vibhuti:不,不应该。请检查我的答案中的链接,或者 - 如果您不信任它 - ISO C 标准,例如open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf,第 330 页。
    猜你喜欢
    • 2010-10-05
    • 2016-03-27
    • 1970-01-01
    • 2020-11-29
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多