我想要比较一个字符字面量和字符串的第一个元素,以检查文件中的注释。为什么使用char?我想将其制作成一个函数,接受一个字符变量作为注释。我不想允许字符串,因为我想将其限制在单个字符长度内。
考虑到这一点,我认为最简单的方法是处理字符并将其传递给std :: string的compare函数。然而,这给我带来了意想不到的结果。
我的代码如下:
为什么函数认为子字符串和字符不相同?正确比较字符和std::string变量的最短方法是什么?
(避免重新分类的简短怒斥...请随意跳过)当我说最短时,我的意思是出于对编码优雅的渴望。请注意,这不是一个作业问题。我是化学工程博士候选人,正在进行独立研究的编码工作。我的最后一个问题被用户msw(还发表了轻蔑的言论)重新分类为“作业”,我认为这是滥用边界。我的代码可能会被其他人重用,但我试图使其易于阅读和可维护。我还有一种奇怪的愿望,在可能的情况下使我的代码尽可能高效。因此,关于效率和优雅性的问题。
考虑到这一点,我认为最简单的方法是处理字符并将其传递给std :: string的compare函数。然而,这给我带来了意想不到的结果。
我的代码如下:
#include <string>
#include <iostream>
int main ( int argc, char *argv[] )
{
std::string my_string = "bob";
char my_char1 = 'a';
char my_char2 = 'b';
std::cout << "STRING : " << my_string.substr(0,1) << std::endl
<< "CHAR : " << my_char1 << std::endl;
if (my_string.substr(0,1).compare(&my_char1)==0)
std::cout << "WOW!" << std::endl;
else
std::cout << "NOPE..." << std::endl;
std::cout << "STRING : " << my_string.substr(0,1) << std::endl
<< "CHAR : " << my_char2 << std::endl;
if (my_string.substr(0,1).compare(&my_char2)==0)
std::cout << "WOW!" << std::endl;
else
std::cout << "NOPE..." << std::endl;
std::cout << "STRING : " << my_string << std::endl
<< "STRING 2 : " << "bob" << std::endl;
if (my_string.compare("bob")==0)
std::cout << "WOW!" << std::endl;
else
std::cout << "NOPE..." << std::endl;
}
给我...
STRING : b
CHAR : a
NOPE...
STRING : b
CHAR : b
NOPE...
STRING : bob
STRING 2 : bob
WOW!
为什么函数认为子字符串和字符不相同?正确比较字符和std::string变量的最短方法是什么?
(避免重新分类的简短怒斥...请随意跳过)当我说最短时,我的意思是出于对编码优雅的渴望。请注意,这不是一个作业问题。我是化学工程博士候选人,正在进行独立研究的编码工作。我的最后一个问题被用户msw(还发表了轻蔑的言论)重新分类为“作业”,我认为这是滥用边界。我的代码可能会被其他人重用,但我试图使其易于阅读和可维护。我还有一种奇怪的愿望,在可能的情况下使我的代码尽可能高效。因此,关于效率和优雅性的问题。
my_string[0]
之前检查0 < my_string.length()
。 - Roland Illig