gpt4 book ai didi

c++ - 比较字 rune 字与 C++ 中的 Std::String

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:50 26 4
gpt4 key购买 nike

我想将字 rune 字与字符串的第一个元素进行比较,以检查文件中的注释。为什么要使用字符?我想把它变成一个函数,它接受一个字符变量作为注释。我不想允许使用字符串,因为我想将它的长度限制为单个字符。

考虑到这一点,我假设最简单的方法是寻址字符并将其传递给 std::string 的比较函数。然而,这给了我意想不到的结果。

我的代码如下:

#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 变量的最短方法是什么?

(为了避免重新分类我的问题的简短咆哮....随意跳过)
当我说最短时,我的意思是出于对编码 Eloquent 的渴望。请注意,这不是作业问题。我是一名化学工程博士生,正在编码作为独立研究的一部分。我的最后一个问题被用户重新归类为“家庭作业”msw (他也发表了讽刺言论)当我问及效率时,我认为这是滥用的边界。我的代码可能会或可能不会被其他人重用,但我正在努力使其易于阅读和维护。我还有一个奇怪的愿望,就是尽可能让我的代码尽可能高效。于是就有了效率和 Eloquent 的问题。

最佳答案

这样做:

  if (my_string.substr(0,1).compare(&my_char2)==0)

不会工作,因为您“欺骗”了字符串,使其认为它正在获取指向以空字符结尾的 C 字符串的指针。这将产生奇怪的影响,包括使您的程序崩溃。相反,只需使用正常的相等性来比较字符串的第一个字符与 my_char:

 if (my_string[0] == my_char)
// do stuff

关于c++ - 比较字 rune 字与 C++ 中的 Std::String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3603353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com