我有一个字符串向量,我尝试执行以下过程:
到目前为止,我的代码正确地从标准输入读取了stings,但是对于我堆叠的其他过程。 (你看到的int告诉我们向量有多大)
我是C ++的新手,所以请回答需要理解! :)
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
using namespace std;
int main() {
unsigned short T = 0;
cin >> T;
T++;
vector<string> phrases(T);
for (int i = 0; i < T; ++i) {
getline(cin,phrases[i]);
cout << phrases[i];
}
vector<string>::iterator letter;
for (int i = 0; i < T; ++i) {
letter = phrases[i].begin();
while (letter != NULL) { //while iterator isn't in the end of the phrases[i]
switch ( letter ) { // we want to replace the letter of the string
case 'a' : letter = 'b' //if the letter of the string is a then replace it with b
//etc
}
letter++; // increase the iterator
}
}
phrases.clear();
return 0;
}
答案 0 :(得分:1)
我认为使用基于范围的for语句会更简单。例如
for ( std::string &s : phrases )
{
for ( char &c : s )
{
switch ( c )
{
case 'a' :
c = 'b';
break;
//etc
}
}
}
考虑到它似乎声明
T++;
毫无意义。
如果您的编译器不支持C ++ 2011,那么您可以通过以下方式重写这些循环
for ( std::vector<std::string>::size_type i = 0; i < phrases.size(); i++ )
{
for ( std::string::size_type j = 0; j < phrases[i].size(); j++ )
{
switch ( phrases[i][j] )
{
case 'a' :
phrases[i][j] = 'b';
break;
//etc
}
}
}
或者您可以使用标准算法std::for_each
为矢量元素提供一些功能对象。