【发布时间】:2019-08-13 10:27:52
【问题描述】:
我知道关于这个主题有类似的问题,但我想知道我的方法中的错误。
我正在编写一个代码来反转字符串中的元音。我首先将一个字符串的所有元音放入一个向量中,然后通过替换元音从后面循环字符串,但我一直收到错误。
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
string reverseVowels(string s)
{
vector<char>v;
vector<char>v2;
char c;
for (int i = 0; i < s.size(); i++)
{
//taking all the vowels of the string into a vector
if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')
{
v.push_back(s[i]);
}
}
//reversing the vowels of the string
for (int i = s.size() - 1; i >= 0; i--)
{
if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')
{
s[i] = v[i]; //Getting an error here
}
}
return s;
}
int main()
{
//Required output is "holle"
string s = "hello";
string p = reverseVowels(s);
cout << p << endl;
return 0;
}
【问题讨论】:
-
如果字符串的大小是100怎么办?什么是 v[100]?
-
v不应在此代码中被i索引...永远。 -
如果你真的想这样做,那么例如引入从 v 向量中选择元音的新索引。这是因为在大多数情况下,v 的大小会小于 s 的大小。你尝试得到 v[s.size() - 1].
-
不能解决您的问题,但您确实意识到您可以在不使用任何额外存储空间的情况下进行此逆转?根本不需要元音向量。
-
这种方法相当粗暴。不需要那个元音向量。只需从字符串的前面扫描直到碰到元音,然后从字符串的后面扫描直到碰到元音,然后交换两者。从您停止的点继续扫描。重复直到两次扫描相遇。
标签: c++ arrays string vector data-structures