我想检查单个字符是否在C字符串中。角色是'|'
用于Linux中的管道(实际上,我还想检查'<'
,'>'
,'>>'
,'&'
)。
在Java中,我可以这样做:
String.indexOf()
但是如何在C中完成此操作而不循环遍历整个字符串(char*
字符串)?
答案 0 :(得分:12)
如果您需要搜索某个角色,可以使用strchr
功能,如下所示:
char* pPosition = strchr(pText, '|');
如果找不到给定的字符, pPosition
将为NULL
。例如:
puts(strchr("field1|field2", '|'));
将输出:“| field2”。请注意,strchr
将执行转发搜索,要搜索向后,您可以使用strrchr
。现在想象(只是为了提供一个例子)你有一个像这样的字符串:“variable:value | condition”。您可以使用以下内容提取值字段
char* pValue = strrchr(strchr(pExpression, '|'), ':') + 1;
如果您想要的是字符串中字符的索引,请在此处查看this post。您可能还需要IndexOfAny()
之类的内容,here SO上的其他帖子,其中使用strnspn
。
相反,如果你正在寻找一个字符串,你可以使用strstr
函数,如下所示:
char* pPosition = strstr(pText, "text to find");
答案 1 :(得分:3)
strchr
是你的朋友。
char *strchr(const char *s, int c);
strchr
函数定位第一次出现的c
(转换为char
)s
指向的字符串。
strchr
函数返回指向定位字符的指针,如果是,则返回空指针 字符串中不会出现字符。
当然,在最坏的情况下,函数必须遍历整个字符串(正如Java函数可能做的那样)。