函数不允许比较字符串中的单个字符 - C++
Function won't allow comparison of single chars in String - C++
我有一个名为removeInelligibleCharsFromTargetName
的新函数。
void removeInelligibleCharsFromTargetName(string *targetName)
{
for(int i = 0; i < targetName->length(); i++)
{
for(int j = 0; j < ineligibleChars.length(); j++)
{
if(targetName[i] == ineligibleChars[j])
targetName[i] = '_';
}
}
}
问题是当我在if循环中尝试比较时,我会得到以下错误:
错误C2678:二进制"==":找不到接受"std::string"类型左侧操作数的运算符(或者没有可接受的转换)32>c:\program files\microsoft sdks\windows\v6.0a\include\guiddef.h(192):在尝试匹配参数列表"(std::string,char)"时,可能为"int operator==(const GUID&,const GUID&)"
但是,将完全相同的嵌套循环放回我调用它的位置,而不是调用它工作正常的函数。
有人能告诉我为什么它在函数中不起作用,但在函数外却很好。毫无疑问,它是一个指针,但我不知道是什么。
为什么要传递指向string
的指针?这真是个坏主意。传递引用。
void removeInelligibleCharsFromTargetName(string& targetName)
{
for(int i = 0; i < targetName.length(); i++)
{
for(int j = 0; j < ineligibleChars.length(); j++)
{
if(targetName[i] == ineligibleChars[j])
targetName[i] = '_';
}
}
}
问题是,当你有一个指针时,targetName[i]
和*(targetName+i)
是一样的这相当于对字符串数组进行索引。如果没有字符串数组,这只会导致未定义的行为。幸运的是,代码没有编译(无法将字符串与字符进行比较),编译器发现了错误。如果它碰巧是编译的,当你运行它时,你可能会观察到一些非常奇怪的行为。
当您有一个string
或对它的引用时,targetName[i]
会调用字符串上的operator[]
,它会索引到字符串中,并实际为您提供一个字符。
将每次出现的targetName[i]
更改为(*targetName)[i]
。或者,按照R·马丁尼奥·费尔南德斯的建议,传一个参考而不是一个指针。
当targetName
是指针时,此代码为
if(targetName[i] == ineligibleChars[j])
targetName[i] = '_';
尝试从指针进行索引,就像它曾经是(指向)数组的指针一样。要访问实际指向的字符串,您需要在索引到字符串之前取消引用指针
if((*targetName)[i] == ineligibleChars[j])
(*targetName)[i] = '_';
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 为什么char不是单个字符
- C++ 字符串单个字符
- 将单个字符转换为 std::string 前缀 \x01
- 尝试一次将单个字符读取到大小不确定的数组中
- C++ 如何将字符串拆分为单个字符
- 如何在C++中将单个字符哈希为相对较小的素数?
- 如何将像'A'这样的单个字符替换为类似"10"?
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
- std::bad_alloc 将文本文件中的单个字符存储到矢量C++中时
- 如何从用户那里获取单个字符,直到他输入"."或输入
- 字符串中单个字符作为数组的数据类型是什么
- 字符串中的重音,如何在单个字符中存储重音字符
- 从字符串中提取单个字符并将其转换为 int
- 如何将单个字符转换为为基本密码哈希器设置整数,C++
- 下推解析器是否扫描令牌或单个字符
- 如何定义一个从任何编码空间解析单个字符的精神 x3 解析器?
- C :占用更多内存,将单个字符作为char或字符串存储
- 如何从字符串中读取单个字符
- WM_GETTEXT只返回单个字符