我已经google了很多搜索解决方案,但到目前为止还没有! 我需要在char变量中搜索某个匹配的char。
char SOMECHAR[] = { 0XC1, 0XC2, 0XD4, 0XD3 };
if (strchr(SOMECHAR, '0xD3') == NULL) {
// i did not find it!
}
strstr
不起作用,strchar
不起作用,是其他解决方案吗?
非常感谢!
答案 0 :(得分:1)
两件事:
1)'0xD3'
与0xD3
或'\xD3'
不同,它们是您可能真正想要使用的值。
2)您需要将SOMECHAR
的空终止strchr()
在未找到该字符的情况下明确定义。或者,您可以使用memchr()
并传入SOMECHAR
数组的大小。
所以:
char SOMECHAR[] = { 0XC1, 0XC2, 0XD4, 0XD3, 0 };
if (strchr(SOMECHAR, 0xD3) == NULL) {
// i did not find it!
}
或
char SOMECHAR[] = { 0XC1, 0XC2, 0XD4, 0XD3 };
if (memchr(SOMECHAR, 0xD3, sizeof(SOMECHAR)) == NULL) {
// i did not find it!
}
答案 1 :(得分:1)
请注意,您需要小心使用带有签名char
的高值
例如,0xD3 == (char)0xD3
不是真的,而0xD3 == (unsigned char)0xD3
是。
std::find
的示例:
char SOMECHAR[] { 0x31, 0xC2, 0xD4, 0xD3 };
auto loc = std::find(std::begin(SOMECHAR), std::end(SOMECHAR), (char)0xD3);
std::cout << "Found at " << std::distance(std::begin(SOMECHAR),loc) << std::endl;
答案 2 :(得分:0)
这是一个例子
#include <cstring>
//...
const char *s = "Patratel";
if ( const char *p = std::strchr( s, 't' ) )
{
std::cout << "Character 't' is found at position " << p - s << std::endl;
}
如果字符数组不包含字符串,则可以使用标准函数memchr
例如
#include <cstring>
//...
char SOMECHAR[] = { '\xC1', '\xC2', '\xD4', '\xD3' };
if ( char * p = ( char * )std::memchr( SOMECHAR, '\xD3', sizeof( SOMECHAR ) ) )
{
std::cout << "Character 't' is found at position " << p - SOMECHAR << std::endl;
}