创建不同的字符串向量,并使用迭代器将这些字符串更改为大写
Create varies string vectors, and using iterator to change those strings to uppercase
我是C++新手。我正在尝试解决一个像这样的问题:
问:创建不同的字符串向量,并使用迭代器将这些字符串更改为大写。
下面是我想出的代码。但是,IDE 始终输出错误。因为我是C++新手,所以我没有足够的知识来解决问题。
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
void checkAndPrint(vector<string> &vec) {
cout << "content: [";
for (auto it = vec.begin(); it != vec.end(); ++it) {
for (char c : it) {
c = toupper(c);
cout << c;
}
}
cout << "]n" << endl;
}
int main() {
vector<string> s1;
vector<string> s2(10);
vector<string> s3(10, "hello");
vector<string> s4{10, "world"};
vector<string> s5{"good", "morning"};
vector<string> s6{10, "10"};
checkAndPrint(s1);
checkAndPrint(s2);
checkAndPrint(s3);
checkAndPrint(s4);
checkAndPrint(s5);
checkAndPrint(s6);
}
错误:
error: invalid range expression of type 'std::__1::__wrap_iter<std::__1::basic_string<char> *>'; did you mean to dereference it with '*'?
for (char c : it) {
^
*
你需要取消引用迭代器:
for (char c : *it)
或者使用第二个范围 for 循环:
for (auto &v : vec) {
for (char c : v) { ...
另请注意,当前您没有将原始向量修改
为for (char c : *it)
在原始 char
S 的副本上运行。要解决此问题,请改为迭代引用,即
for (char &c : *it)
最后,请注意,您应该添加一个转换,如 在调用 toupper之前,我需要转换为无符号字符吗?你也忘了#include <cctype>
它提供了toupper
.
it
是迭代器,而不是字符串本身。它本质上是一个指向字符串的指针,该字符串会更改每次迭代指向的字符串,因此必须先取消引用它,然后才能访问for
循环中的每个字符:
for (char c : it) {
应该变成:
for (char c : *it) {
此外,如果您希望更新字符串本身以使其大写,则需要在第二个 for 循环中使用 char
引用,如下所示:
for (char& c : *it) {
你现在的方式是,你正在更改一个新的变量c
(本质上是一个副本(,它不会反映在原始字符串中。使用 char
引用将允许您更改原始字符串中的字符。
相关文章:
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 字符串迭代器永远不会达到 std::string::end()
- 为什么C++字符串迭代器不检查错误?
- 将字符串::迭代器转换为标准::字符串
- 如何将字符串迭代器指向的数据推回字符串向量
- 为什么删除字符串迭代器会产生const char参考
- 字符串迭代器不兼容错误,当我将字符串转换为矢量<byte>时
- 从数组列表中的字符串迭代器获取 int dat<struct>
- 字符串迭代器不可用C 问题
- C++ 字符串迭代器"find first of"
- 表达式:字符串迭代器不兼容,调用"SetDllDirectory"
- 字符串迭代器和理解函数
- 为什么我的 forloop 在我的 lexical_words 函数中没有将字符串数组('keyWords")中的单词与字符串迭代器中的单词进行比较?
- UTF-8字符串迭代器
- 字符串迭代器+偏移量超出范围
- 字符串迭代器与读取每一行不兼容
- 字符串::迭代器必然是random_access_iterator
- 使用类型特征为字符串迭代器专门化模板函数
- 在find_if算法中将 char* 转换为字符串::迭代器
- 取消引用字符串迭代器无法编译