初学者:c ++代码:打印时字符串被复制

时间:2016-03-16 16:52:00

标签: string for-loop vector

所以我编写了一个程序,你输入“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;
}

这可能很容易解决,但不适合我。

由于

1 个答案:

答案 0 :(得分:0)

如果您不想在阵列中使用多个元素,则每次添加字符串时都应该检查它是否已经存在(在循环中,与所有其他字符串进行比较)或者您可以将容器从vector更改为另一个,以保证唯一性,例如std::mapstd::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;
}