如何搜索字符串的一部分而不是全部
how to search a part of a string not all of it
在 C++ 中 如何只搜索字符串的一部分,从 startIndex 开始,到一些字符计数后结束。 在某些情况下,我只需要在前 5 个字符中搜索一个特殊的字符或字符串,为什么我必须遍历整个字符串,它可能是 1000 个字符或它的倍数。 我在 C++ 运行时库中所知道的, 所有函数都不支持这样的东西,例如 strchr 它将搜索所有字符串,我不希望我想要将字符串的特定部分从 [] 比较到 []。我已经看到了使用 wmemchr 解决该问题的解决方案,但我需要它依赖于当前选择的区域设置,如果有人知道如何做到这一点,我将不胜感激。
还有如何直接比较与区域设置相关的 2 个字符?
我不知道
直接使用标准库执行此操作的方法,但是您可以非常轻松地创建自己的函数和strstr。
/* Find str1 within str2, limiting str2 to n characters. */
char * strnstr( char * str1, const char * str2, size_t n )
{
char * ret;
char temp = str1[n]; // save our char at n
str2[n] = NULL; // null terminate str2 at n
ret = strstr( str1, str2 ); // call into strstr normally
str2[n] = temp; // restore char so str2 is unmodified
return ret;
}
对于你的第二个问题:
还有如何直接比较与区域设置相关的 2 个字符?
我不确定你的意思。你是在问如何直接比较两个角色吗?如果是这样,您可以像任何其他值一样进行比较。 if( str1[n] == str2[n] ) { ...做点什么... }
您可以使用 std::substr 来限制搜索区域:
std::string str = load_some_data();
size_t pos = str.substr(5).find('a');
我是这样解决的
int64 Compare(CHAR c1, CHAR c2, bool ignoreCase = false)
{
return ignoreCase ? _strnicoll(&c1, &c2, 1) : _strncoll(&c1, &c2, 1);
}
int64 IndexOf(const CHAR* buffer, CHAR c, uint count, bool ignoreCase = false)
{
for (uint i =0; i < count; i++)
{
if (Compare(*(buffer + i), c, ignoreCase) == 0)
{
return i;
}
}
return npos;
}
int64 LastIndexOf(const CHAR* buffer, CHAR c, uint count, bool ignoreCase = false)
{
while(--count >= 0)
{
if (Compare(*(buffer + count), c, ignoreCase) == 0)
{
return count;
}
}
return npos;
}
非营利组织 = -1
并指定起始索引传递到 (缓冲区 + startIndex) 作为第二个或第三个方法的缓冲区
相关文章:
- C++:如何使函数只返回作为列表一部分的字符串
- std::sort()函数无法对向量的一部分进行排序
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 反转整数的一部分(一半)的函数
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- C 指针和对象作为不同类的一部分
- 如何分析代码的哪一部分创建了线程?
- 如何使用接口指针调用方法,该指针是其具体类的一部分,而不是接口的一部分
- 复制矩阵的一部分并粘贴到另一个矩阵C++上
- 我可以将c ++清理器仅应用于程序的一部分而不是第三方库吗?
- C++向量的哪一部分在传递给函数时被复制
- C++结构的一部分
- 在 MPI 中共享数组的一部分
- 如何检测文件夹是否太重,如果是,请删除其中的一部分
- 全部转换为大写
- 捕获全部处理程序检测C++中的子类异常
- 句柄OK全部崩溃
- 如何将文件的一部分读取到std::list缓冲区?
- c++中的交叉编译(作为跨平台应用程序的一部分或作为服务)
- 如何搜索字符串的一部分而不是全部