我正在使用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
时,我会遇到代码和逻辑错误!<登记/>
谢谢你的时间 。
对不起我拼写单词的错误
答案 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;
}
答案 2 :(得分:0)
您可以在第一个for循环中执行此操作:
string w = words.at(i);
std::transform(w.begin(), w.end(), w.begin(), ::toupper);