所以我编写了一个程序,你输入“n”字符串。 Porgram按字母顺序打印第一个和最后一个字符串,然后打印其余部分(其余部分没有字母顺序)
例如,用户输入ab
cd
ef
gh
计划应该是:
ab
gh
cd
ef
上面这部分在我的代码中运行正常,当你输入相同字符串的2倍时会出现问题,它会打印它们两个,这不应该发生......它应该跳过重复并完成原来的工作。
例如,如果我输入我的代码:
ab
cd
ef
gh
ab
程序将打印两次ab等。
ab
ab
cd
ef
gh
这是代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
cout<<"Enter a number of words: ";
int n;
cin>>n;
vector<string> v;
for(int i=0;i<n;i++){
string temp;
cout<<"Enter "<<i+1<<". word: ";
cin>>temp;
v.push_back(temp);
}
if(v[0][0]<v[n-1][0])cout<<v[0]<<endl<<v[n-1];
else cout<<v[n-1]<<endl<<v[0];
cout<<endl;
for(int i=1;i<n-1;i++){
cout<<v[i]<<endl;
}
return 0;
}
这可能很容易解决,但不适合我。
由于
答案 0 :(得分:0)
如果您不想在阵列中使用多个元素,则每次添加字符串时都应该检查它是否已经存在(在循环中,与所有其他字符串进行比较)或者您可以将容器从vector
更改为另一个,以保证唯一性,例如std::map
或std::unordered_set
。
使用矢量,您可以像这样更改代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
cout << "Enter a number of words: ";
int n;
cin >> n;
vector<string> v;
for( int i = 0; i < n; ) {
string temp;
cout << "Enter " << i + 1 << ". word: ";
cin >> temp;
// loop through the vector searching for temp
int j = 0;
while ( j < v.size() && v[j] != temp )
++j;
// add temp if it isn't already present
if ( j == v.size() ) {
v.push_back(temp);
++i;
}
else
cout << temp << " is already present\n";
}
// use the real size of the vector
int last = v.size() - 1;
if ( v[0][0] < v[last][0] )
cout << v[0] << endl << v[last];
else
cout << v[last] <<endl <<v[0];
cout << endl;
for ( int i = 1; i < last; i++ ){
cout << v[i] << endl;
}
return 0;
}