c ++在char函数中搜索char?

时间:2015-05-29 14:22:54

标签: c++

我已经google了很多搜索解决方案,但到目前为止还没有! 我需要在char变量中搜索某个匹配的char。

 char SOMECHAR[] = { 0XC1, 0XC2, 0XD4, 0XD3 };
    if (strchr(SOMECHAR, '0xD3') == NULL) {
// i did not find it!
   }

strstr不起作用,strchar不起作用,是其他解决方案吗?

非常感谢!

3 个答案:

答案 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;
}