矢量没有推回

Vector is not pushing back

本文关键字:      更新时间:2023-10-16

我正在尝试制作一个将字符串翻译成猪拉丁文的程序。问题是程序在我运行时停止运行。我认为问题在于矢量"萨利"没有反击。下面是我的代码:

#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)
相关文章:
  • 没有找到相关文章