gpt4 book ai didi

c++ - 连接字符串的意外问题

转载 作者:太空狗 更新时间:2023-10-29 23:45:13 27 4
gpt4 key购买 nike

我正在尝试使用 + 连接字符串,但发生了一些奇怪的事情。这是我在类项目中的“成绩”类(class):

#pragma once
#include <fstream>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Grade {
private:
string className;
string student;
string letter;

public:
Grade(string c, string s, string l) : className(c), student(s), letter(l) {}

string getLetterGrade() const { return letter; }
string getClassName() const { return className; }
string getStudent() const { return student; }
void setLetterGrade(string l) { letter = l; return;}
void setClassName(string c) { className = c; return;}
void setStudnet(string s) { student = s; return;}

string toString() const { string output = "hello"+student; return output; }
};

显然,toString() 方法目前不是我想要的。如果我像上面那样运行 toString(),我会按预期得到“hello529173860”。但是,如果我将行更改为:

string toString() const { string output = student+"hello"; return output; }

然后输出是“hello3860”。这不仅仅是将 hello 字符串放在前面,而是在此过程中替换 student 字符串中的字符......不知何故?

此外,如果我尝试使用:

string toString() const { string output = "hello"+" world"; return output; }

我得到一个错误:

Grade.h: In member function ‘std::string Grade::toString() const’:
Grade.h:29:53: error: invalid operands of types ‘const char [6]’ and ‘const char [7]’ to binary ‘operator+’
string toString() const { string output = "hello"+" world"; return output; }
^

我真的对这里发生的事情一头雾水……特别是因为我已经在程序的前面毫无问题地完成了字符串连接。我想要的是输出如下内容:

“学生+[一些空白]+字母+[一些空白]+类(class)名”

最佳答案

std::string 可以添加到任何东西(另一个 std::string,双引号字符串文字,char)和提供直观的结果,但是如果您尝试将双引号字符串文字添加到另一个字符串文字或 char 则它不会 "工作”:

  • 添加到 char 或其他整数值的字符串文字将经过标准转换为 const char*,然后添加到指针的任何数字都将移动沿着字符数的文字:如果偏移量不在字符串文字内,那么如果您取消引用(使用)结果指针,您将得到未定义的行为,

  • 即使在衰减为两个指针之后,也无法添加两个字符串文字,因此您会遇到编译时错误。

有时您会想要显式构造一个 std::string 以便与其他值的连接按照您的意愿工作:例如my_string = std::string("hello ") + my_const_char_ptr + '\n'

例子:

std::string s = "Hello";

s + " World"; // ok
"Hello " + s; // ok
"Hello " + "World"; // NOT ok - two string literals
s += " World"; // ok
s += " Goodbye " + "World"; // NOT ok - "+" evaluated before "+="
s += std::string(" Goodbye ") + "World"; // OK - right-hand-side no longer two literals
// BUT may be slower than two "s +="

关于c++ - 连接字符串的意外问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21105873/

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