如何在一个含有 "\0" 的字符串里查找指定的字符串?
我用recv从网上接收到一串数据,这数据里含有好几个"\0",我现在想要在这段数据中找到我想要的字符串,请问如何实现啊?
[解决办法]
find(str.begin(), str.end(), "ssss");//ssss为要找的字符串
[解决办法]
直接将char赋值给string类型的就可以了
[解决办法]
不可以,find函数只能返回一个找到的第一个的迭代器,如果找不到,就只想指向最后一个元素的下一个位置的迭代器
c风格的字符串可以直接赋值给c++风格的字符串,string会转换它。
C++风格的字符串调用c_str()可以返回一个c风格字符串
[解决办法]
如果你保证最后是\0\0
#include <stdio.h>
#include <string.h>
char s[]="1\00012\000123\0";
char f[]="123";
int myfind(char* ss,char* ff) {
char *p;
p=ss;
while (1) {
if (p[0]==0) return 0;
if (0==strcmp(p,ff)) return 1;
p+=strlen(p)+1;
}
}
int main() {
printf("%d==myfind(s,f);\n",myfind(s,f));
return 0;
}
//1==myfind(s,f);
#include<iostream>
#include <algorithm>
using namespace std;
int main() {
char str[] = {'h','e','l','l','o','\0','b','i','g','w','o','r','l','d'};
char substr[] = "big";
char * p = search(str, str + sizeof(str), substr, substr+strlen(substr));
if(p != str + sizeof(str)){
cout << "find" << endl;
} else {
cout << "not find" << endl;
}
return 0;
}
/**
* @file memstr.c
* @brief
*/
#include <stdio.h>
#include <string.h>
const char *memstr(const void *b, const char *s, size_t n)
{
const char *ptr, *ret, *end;
size_t len;
len = n;
ret = NULL;
ptr = (const char *)b;
while (len > 0) {
if ((ret = strstr(ptr, s)) != NULL) {
#if 0
return ret;
#else
printf("ret=%s\n", ret);
#endif
}
if ((end = memchr(ptr, '\0', len)) == NULL) {
return NULL;
}
len -= end - ptr + 1;
ptr = end + 1;
}
return NULL;
}
int main(int argc, char *argv[])
{
char b[] = "abc\0def\0ghi\0ab";
const char *ret;
if ((ret = memstr(b, "ab", sizeof(b))) != NULL)
printf("%s\n", ret);
#if 0
#else
return 0;
#endif
if ((ret = memstr(b, "de", sizeof(b))) != NULL)
printf("%s\n", ret);
if ((ret = memstr(b, "gh", sizeof(b))) != NULL)
printf("%s\n", ret);
if ((ret = memstr(b, "bc", sizeof(b))) != NULL)
printf("%s\n", ret);
if ((ret = memstr(b, "hi", sizeof(b))) != NULL)
printf("%s\n", ret);
if ((ret = memstr(b, "ac", sizeof(b))) != NULL)
printf("%s\n", ret);
return 0;
}