矢量没有推回
Vector is not pushing back
我正在尝试制作一个将字符串翻译成猪拉丁文的程序。问题是程序在我运行时停止运行。我认为问题在于矢量"萨利"没有反击。下面是我的代码:
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
char alfa[5]={'a','e','i','o','u'};
void vowDet(vector <string> vec, int ary[5], vector <char> sary){
for(int a=0;a<vec.size();a++){
for(int i=0;i<5;i++){
if(vec[a].find(alfa[i])!=string::npos){
ary[i]=vec[a].find_first_of(alfa[i]);
}
else{ary[i]=1000;}
}
int hold;
for(int b=0;b<4;b++){
for(int c=b+1;c<5;c++){
if(ary[b]>ary[c]){
hold=ary[b];
ary[b]=ary[c];
ary[c]=hold;
}
}
}
sary.push_back(vec[a][ary[0]]); //possible source of error
}
}
int main(){
vector <string> vec (0);
string phrase,temp;
vector <char> sary (0);
cout<<"Enter a phrase to translate: ";
getline(cin,phrase);
phrase.push_back(' ');
int ary[5]={1000,1000,1000,1000,1000};
int count=0;
do{
vec.resize(count+1);
temp=phrase.substr(0,phrase.find(" "));
vec[count].append(temp);
phrase.erase(0,phrase.find(" ")+1);
count++;
}while(phrase.find(" ")!=string::npos);
vowDet(vec,ary,sary);
for(int a=0;a<vec.size();a++){
for(int l=0;l<5;l++){
if(vec[a][0]==alfa[l]){
vec[a].append("way");
goto end;
}
}
int solve;
for(int g=0;g<5;g++){
if(sary[a]==alfa[g]){
solve=g;
}
}
if(vec[a].find(alfa[solve])!=string::npos){
temp=vec[a].substr(0,vec[a].find(alfa[solve]));
vec[a].append(temp);
vec[a].erase(0,vec[a].find(alfa[solve]));
}
vec[a].append("ay");
end:
cout<<endl<<vec[a]<<" ";
}
cout<<endl;
return 0;
}
您通过值传递sary
,该函数获得调用者向量的副本。函数中的任何更改都不会被调用者看到。传递它作为引用来获得你想要的行为。
注意,您还通过值传递vec
,这会产生生成副本的成本。您可以将vec
作为const引用传递,以避免复制并使其在函数中为只读,从而防止它改变调用者的向量。
void vowDet(const vector <string> &vec, int ary[5], vector <char> &sary)
我没有阅读/理解整个代码,但这是一种可能性。vector<char> sary
是按值传递的,这意味着当您调用vowDet()
时,将创建一个本地副本,您对它所做的任何更改都将保持本地,而不会影响创建本地副本的原始副本。尝试通过将声明更改为:
void vowDet(vector <string> vec, int ary[5], vector <char> &sary)
相关文章:
- 没有找到相关文章