替换字符串向量中的字母
Replace letters in vectors of string
我有一个字符串向量,我尝试执行以下过程:
- 我们在 vector[i] 位置有一个字符串;
- 我们遍历字符串直到找到它的结尾
- 同时我们检查字符串中的特定字母并将其替换为另一个
- 我们完成了那个字符串并转到下一个....
到目前为止,我的代码可以正确地从标准输入中读取字符串,但对于我堆叠的其他程序。 (你看到的 int T 告诉我们向量有多大)
我是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;
}
我认为使用基于范围的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
为向量的元素提供一些功能对象。
我有一个字符串向量,我尝试执行以下过程:
- 我们在 vector[i] 位置有一个字符串;
- 我们遍历字符串直到找到它的结尾
- 同时我们检查字符串中的特定字母并将其替换为另一个
- 我们完成了那个字符串并转到下一个....
到目前为止,我的代码可以正确地从标准输入中读取字符串,但对于我堆叠的其他程序。 (你看到的 int T 告诉我们向量有多大)
我是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;
}
我认为使用基于范围的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
为向量的元素提供一些功能对象。