【问题标题】:Converting characters in strings to uppercase not working将字符串中的字符转换为大写不起作用
【发布时间】:2014-12-02 17:40:31
【问题描述】:

我有这个 C++ 代码(我将在下面解释):

#include <iostream>
#include <string>
#include <vector>
#include <cctype>

using namespace std;
int main()
{
    // part 1
    cout << "Write many words separated by either newlines or spaces:"<< endl;
    string word;
    vector<string> v;
    while(cin >> word){
        if(word == "quit"){
            break;
        }
        else{
        v.push_back(word);
        }
    }
    //part 2
    for(string x:v){
        for(char &j:x){
            j = toupper(j);
        }
    }
    //part 3
    for(string x:v){
        cout << x << endl;
    }

    return 0;
}

我要做的是获取一个字符串序列并将字符串中的每个字符转换为大写,然后将字符串输出回来。 我想在研究它时使用向量。 在第 1 部分中,我从标准输入中获取字符串并将它们存储在字符串向量中。我写“退出”以跳出循环并开始将每个字符串中的字母大写。 显然,问题出在第 2 部分。我在那里尝试做的是: 1- 在我们循环时获取一个字符串。 2 一旦我们有了一个字符串,在该字符串中获取一个字符并将其转换为大写。对所有字符执行此操作。 3-对所有字符串执行此操作。

当我编译它时,我得到的都是正确的,除了字符串被大写。 我真的很困惑D:

【问题讨论】:

  • string x:v 你正在修改字符串的副本。您忘记了参考。

标签: c++ string toupper


【解决方案1】:
for(string x:v){
    for(char &j:x){
        j = toupper(j);
    }
}

您通过引用从字符串中取出每个字符,但您按值取出字符串。试试

for (string& x : v){
    // […]
}

请注意,使用 C++1Z,我们将能够使用简洁的基于范围的 for 循环,让生活变得更轻松:

for (x : v) {   // Captures by reference automatically
    // […]
}

【讨论】:

  • 非常感谢哥伦布。我只是想只需要引用字符即可。这本书没有让我想起矢量。因此,对于每个序列,我都需要通过引用来获取它的“子”“事物”。 (抱歉命名不正确)
猜你喜欢
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
相关资源
最近更新 更多