将字符串逐个字符插入矢量
insert string into vector character by character
我正在尝试将字符串的字符插入字符向量中,但以相反的顺序放置字母. 谁能告诉我为什么这不起作用
int main()
{
string a = "Hello";
vector<char> arr(5);
for(int i = 4 ; i == 0 ; i--)
{
arr.push_back(a[i]);
cout << arr[i];
}
return 0;
}
IM 试图以 1 个 1 的相反顺序推回角色
它们是代码的几个问题:
-
您正在创建一个最初大小为 5 的
vector
,然后您尝试将另外5 个字符推入其中,总共 10 个字符。您需要:-
初始化其容量而不是大小。
-
按原样初始化大小,但在循环中使用
arr[4-i]
而不是arr.push_back()
。
-
-
你的循环永远不会被进入,因为
i == 0
永远不会是真的。
尝试更多类似的东西:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string a = "Hello";
size_t len = a.size();
vector<char> arr;
arr.reserve(len);
for(int i = len-1; i >= 0; i--) {
arr.push_back(a[i]);
}
for(size_t i = 0; i < len; ++i) {
cout << arr[i];
}
return 0;
}
或者:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string a = "Hello";
size_t len = a.size();
vector<char> arr(len);
for(int i = len-1; i >= 0; i--) {
arr[len-1-i] = a[i];
}
for(size_t i = 0; i < len; ++i) {
cout << arr[i];
}
return 0;
}
以更C++的方式处理此问题的另一种方法是改用迭代器:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string a = "Hello";
vector<char> arr;
arr.reserve(a.size());
for(auto iter = a.rbegin(); iter != a.rend(); ++iter) {
arr.push_back(*iter);
}
for(auto ch : arr) {
cout << ch;
}
return 0;
}
或者:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string a = "Hello";
vector<char> arr(a.size());
auto arr_iter = arr.begin();
for(auto a_iter = a.rbegin(); a_iter != a.rend(); ++a_iter, ++arr_iter) {
*arr_iter = *a_iter;
}
for(auto ch : arr) {
cout << ch;
}
return 0;
}
然后你可以完全摆脱手动循环:
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main() {
string a = "Hello";
vector<char> arr;
arr.reserve(a.size());
copy(a.rbegin(), a.rend(), back_inserter(arr));
cout.write(arr.data(), arr.size());
return 0;
}
或者:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
string a = "Hello";
vector<char> arr(a.size());
copy(a.rbegin(), a.rend(), arr.begin());
cout.write(arr.data(), arr.size());
return 0;
}
或者:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string a = "Hello";
vector<char> arr(a.rbegin(), a.rend());
cout.write(arr.data(), arr.size());
return 0;
}
我不确定当向量完全能够在构造函数中采用迭代器时,为什么会使事情复杂化?因此,您的绝大多数代码都可以替换为简单的:
vector<char> arr(a.rbegin(), a.rend());
下面的完整程序显示了它的实际效果:
#include <iostream>
#include <string>
#include <vector>
using std::cout; using std::string; using std::vector;
int main() {
string a = ")-: yug emosdnah a si xaP";
vector<char> arr(a.rbegin(), a.rend());
for (auto ch: arr) cout << ch;
cout << 'n';
}
for(int i = 4 ; i == 0 ; i--)
这意味着在i
等于零时继续前进 - 但i
从四开始,因此for
循环立即终止。
你可能的意思是
for(int i = 4 ; i >= 0 ; i--)
相关文章:
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 在将字符插入 2d 字符串时如何不显示空字符?
- 如何将整数向量值插入字符向量
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- C++ 在字符的开头插入字符
- C ++程序在字符数组中插入单词
- C++如果旋转是特定字符,请插入符号
- 如何在文本文件中间插入字符
- 通过字符串::插入插入字符时出错
- 如何在矢量"[i]"中插入*字符<string>?[C++]
- 在字符串之间插入字符
- 在字符串的每个元素(不使用弦乐)的每个元素之后插入字符
- 在 sqlite 中插入字符* 作为向量<byte>
- 如何在集合中插入字符
- 插入字符在C 中介绍一个字符串
- 检测编辑控件焦点并插入字符
- 文件处理,在复制内容时插入ÿ字符
- 在字符数组中的特定位置插入字符
- 在c++中的字符串中插入字符
- 在数组或字符串中插入字符