我正在尝试使用vector[].substr()
,但我不知道这是否可行。有谁知道另一种方法吗?我的目标是采用向量中的单词并将其与第一个元音分开。任何帮助表示赞赏。我的代码看起来像:
#include <iostream>
#include "derrick_math.h"
#include <string>
#include <sstream>
#include <vector>
#include <cctype>
#include <algorithm>
using namespace std;
int main()
{
string phrase;
string ay = "ay";
vector<string> vec;
cout << "Please enter the word or phrase to translate: ";
getline(cin, phrase);
istringstream iss(phrase);
copy(istream_iterator<string>(iss),
istream_iterator<string>(),
back_inserter(vec));
for (int i = 0; i < vec.size(); i++)
{
if (vec[i].substr(0, 1) == "a || e || i || o || u || A || E || I || O || U")
{
cout << vec[i] << "ay";
}
if (vec[i].substr(1, 1) == "a || e || i || o || u || A || E || I || O || U")
{
cout << vec[i].substr(2) << vec[i].substr(0, 1) << "ay";
}
if (vec[i].substr(2, 1) == "a || e || i || o || u || A || E || I || O || U")
{
cout << vec[i].substr(3), vec[i].substr(0, 2) + "ay";
}
if (vec[i].substr(3, 1) == "a || e || i || o || u || A || E || I || O || U")
{
cout << vec[i].substr(4), vec[i].substr(0, 3) + ay;
}
cout << vec[i] << " ";
}
cout << endl;
system("pause");
return 0;
答案 0 :(得分:4)
访问矢量元素的成员函数不是问题。您的if语句格式不正确。目前,您正在将子字符串与一个长字符串进行比较,在这种情况下,它永远不会评估为真。
如果你想检查一个特定的角色,你需要这样的东西:
bool is_vowel(char c) {
c = tolower(c);
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
或者...
bool is_vowel(char c) {
switch(tolower(c)) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
return true;
default:
return false;
}
}
现在您可以这样调用您的函数:
std::string s = vec[i];
if(is_vowel(s[n])) {
// the third character is a vowel
}
您的代码也存在其他一些问题。这一行:
cout << vec[i].substr(4), vec[i].substr(0, 3) + ay;
应该是:
// no comma operator
cout << vec[i].substr(4) << vec[i].substr(0, 3) + ay;
要在向量的末尾添加项目,您只需要:
vec.push_back(s);
答案 1 :(得分:0)
您可以使用std::string::find_first_of
这将找到参数中所有任何角色的第一场比赛的位置。 然后将它与substr分开,如
for (int i = 0; i < vec.size(); ++i){
size_t pos = vec[i].find_first_of("aAeEiIoOuU");
std::string result = "";
if (pos != std::string::npos){ // Check if find_first_of got a match
result = vec[i].substr(pos + 1);
}
std::cout << "result = " << result << std::endl;
}
编辑如果您正试图获得声音,则可以使用此功能:
for (int i = 0; i < vec.size(); ++i){
size_t pos = vec[i].find_first_of("aAeEiIoOuU");
char result;
if (pos != std::string::npos){
result = vec[i][pos];
}
std::cout << "result = " << result << std::endl;
}