更改向量中的字符串元素值

时间:2013-06-08 23:40:01

标签: c++

我正在使用string中的vector开展工作。我让自己陷入了死胡同。我使用vector<int>元素进行操作,并了解如何使用它们!我知道如何使用string!但我无法通过我需要在向量中更改字符串元素值的部分。我的意思是我不知道在loop中用“做某事”做什么。因此,为了简短起见我现在正在为我工​​作的任务提供任务。

cin读取一系列字词并将值存储在vector中。阅读完所有字词后,处理vector并将每个字词更改为大写

这是我到目前为止所得到的

int main ()  
{
    vector<string> words;    //Container for all input word
    string inp;              //inp variable will process all input 

    while (cin>>inp)         //read
       words.push_back(inp); //Storing words 

    //Processing vector to make all word Uppercase
    for (int i = 0; i <words.size(); ++i)
     //do something

         words[i]=toupper(i);
    for (auto &e : words)    //for each element in vector 
     //do something

     cout<<e;

    keep_window_open("~");
    return 0;
}  

第一个for声明不正确我尝试访问vector元素并将单词更改为上部但是它对我来说不起作用 我尝试了很多方法来访问vector元素,但在string上尝试使用toupper()成员函数vector时,我会遇到代码和逻辑错误!<登记/> 谢谢你的时间 。 对不起我拼写单词的错误

3 个答案:

答案 0 :(得分:4)

试试这个:

for (auto& word: words)
  for (auto& letter: word)
    letter = std::toupper(letter);

答案 1 :(得分:2)

这可以通过使用std::transform标准算法来迭代单词的字符来解决。您也可以使用std::for_each代替手动循环。

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

int main()  
{
    std::vector<std::string> words;
    std::string inp;

    while (std::cin >> inp)
       words.push_back(inp);

    std::for_each(words.begin(), words.end(), [] (std::string& word)
    {
        std::transform(
            word.begin(),
            word.end(), 
            word.begin(), (int (&)(int)) std::toupper
        );
    })

    for (auto &e : words)
        std::cout << e << std::endl;
}

And here is a demo.

答案 2 :(得分:0)

您可以在第一个for循环中执行此操作:

string w = words.at(i);
std::transform(w.begin(), w.end(), w.begin(), ::toupper);