C++ 返回C+中的字符串变量+;
为了方便起见,我正在尝试制作一个不区分大小写的基本用户界面。为此,我制作了一个转换类,使字符串大写,但我遇到了一个问题。在使用该类之后,main()中的if语句应该解释来自转换器的消息,但它只读取原始输入的内容,而不是大写对应内容,我尝试直接从转换器返回转换后的字符串,但它不允许我这样做C++ 返回C+中的字符串变量+;,c++,C++,为了方便起见,我正在尝试制作一个不区分大小写的基本用户界面。为此,我制作了一个转换类,使字符串大写,但我遇到了一个问题。在使用该类之后,main()中的if语句应该解释来自转换器的消息,但它只读取原始输入的内容,而不是大写对应内容,我尝试直接从转换器返回转换后的字符串,但它不允许我这样做 #include "stdafx.h" #include <iostream> #include <string> using namespace std; string respo
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
string response;
//converts responses to upper-case
void convert(string response) {
for (int i = 0; i < response.length(); i++) {
response[i] = toupper(response[i]);
}
}
//main dialogue
int main() {
cout << "How are you?: ";
getline(cin, response);
convert(response);
if (response == "GOOD") {
cout << "Response 1./l";
}
else {
cout << "Response 2./l";
}
}
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
字符串响应;
//将响应转换为大写
无效转换(字符串响应){
对于(int i=0;i
在C++中:void转换(字符串和响应){
你的情况有点“奇怪”因为正如@NeilLocketz在评论中指出的,你在方法中有一个全局的响应
,本地的响应
,它实际上是全局的,因为你使用它作为调用参数。如果你想正确地做事情,你可能不希望响应
是全局的
请注意,接受的答案仍有比这更多的内存副本。真正的关键是理解传递值和传递引用,并使用适合您的情况的任何一个。查找“传递值”和“传递引用”-您有“传递值”,但您期望的是“传递引用”
在C++中:void转换(字符串和响应){
你的情况有点“奇怪”因为正如@NeilLocketz在评论中指出的,你在方法中有一个全局的响应
,本地的响应
,它实际上是全局的,因为你使用它作为调用参数。如果你想正确地做事情,你可能不希望响应
是全局的
请注意,接受的答案仍有比此更多的内存副本。真正的关键是理解“按值传递”和“按引用传递”,并使用适合您的情况的副本。另一个选项是更改函数标题,使其返回字符串。即:
string convert(const string &inResponse) {
string outResponse(inResponse);
for (int i = 0; i < inResponse.length(); i++) {
outResponse[i] = toupper(inResponse[i]);
}
return outResponse;
}
另一个选项是更改函数头,使其返回一个字符串
。即:
string convert(const string &inResponse) {
string outResponse(inResponse);
for (int i = 0; i < inResponse.length(); i++) {
outResponse[i] = toupper(inResponse[i]);
}
return outResponse;
}
除了需要传递引用而不是值之外,您还应该尝试使用C++-11功能:
void convert(string &response) {
for (auto &c: response) {
c = toupper(c);
}
}
它更干净、更简单。除了需要传递引用而不是值之外,您还应该尝试使用C++-11功能:
void convert(string &response) {
for (auto &c: response) {
c = toupper(c);
}
}
它更干净、更简单。他还跟踪了全球响应他也跟踪了全球响应response@John3136尽可能避免复制的好处。我不知道类可以被识别为字符串,这可能已经解决了我的问题。最后,我放了getline(cin,response);在转换器本身中,只要我需要响应,就调用转换器。我不知道类可以被识别为字符串
这意味着什么?现在你已经将输入与修改结合起来了-这是糟糕的软件工程。这里介绍了几种好的可行解决方案,但你忽略了它们hem all?@John3136关于尽可能避免复制的好观点。我不知道类可以被识别为字符串,这可能会解决我的问题。最后,我把getline(cin,response)放在;在转换器本身中,只要我需要响应,就调用转换器。我不知道类可以被识别为字符串
这意味着什么?现在你已经将输入与修改结合起来了-这是糟糕的软件工程。这里介绍了几种好的可行解决方案,但你忽略了它们哼哼?