Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回C+中的字符串变量+;_C++ - Fatal编程技术网

C++ 返回C+中的字符串变量+;

C++ 返回C+中的字符串变量+;,c++,C++,为了方便起见,我正在尝试制作一个不区分大小写的基本用户界面。为此,我制作了一个转换类,使字符串大写,但我遇到了一个问题。在使用该类之后,main()中的if语句应该解释来自转换器的消息,但它只读取原始输入的内容,而不是大写对应内容,我尝试直接从转换器返回转换后的字符串,但它不允许我这样做 #include "stdafx.h" #include <iostream> #include <string> using namespace std; string respo

为了方便起见,我正在尝试制作一个不区分大小写的基本用户界面。为此,我制作了一个转换类,使字符串大写,但我遇到了一个问题。在使用该类之后,main()中的if语句应该解释来自转换器的消息,但它只读取原始输入的内容,而不是大写对应内容,我尝试直接从转换器返回转换后的字符串,但它不允许我这样做

#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)放在;在转换器本身中,只要我需要响应,就调用转换器。
我不知道类可以被识别为字符串
这意味着什么?现在你已经将输入与修改结合起来了-这是糟糕的软件工程。这里介绍了几种好的可行解决方案,但你忽略了它们哼哼?