矢量字符串比较C ++

时间:2015-07-09 17:48:42

标签: c++ string for-loop vector while-loop

我正在编写一个关于输入字符串的代码,然后将它们与向量中的其他元素进行比较,如果有正匹配,则不要将它们放入。我写了这个:

    // NamePair.cpp : definisce il punto di ingresso dell'applicazione console.
//

#include "stdafx.h"
#include "std_lib_facilities.h"
#include <vector>


int _tmain(int argc, _TCHAR* argv[])
{
    vector<string> names;
    vector<int> scores;
    string name = "0";
    int score = 0;
    int error = 0;
    int n = 0;

    cout << "Type a name and a score: " << endl;

    while (cin >> name >> score) {
        ++n;
        cout << "This is # " << n << " name you typed." << endl;
        if (n >= 2) {
            for (int i : scores) {
                if (names[i] == name) {
                    cout << "You have already typed this name dude!" << endl;
                }
                else if (name != "NoName") {
                    names.push_back(name);
                    scores.push_back(score);
                }
                else {
                    break;
                }
            }
        }
    }

    for (int i = 0; i < scores.size(); ++i) {
        cout << names[i] << "\t" << scores[i] << endl;
    }

    keep_window_open();

    return 0;
}

问题在于,当我尝试运行该程序时,它可以工作,但它似乎停留在我不断添加名称和分数的位置,但它显然没有做任何事情(既没有显示警告信息也没有停止,如果输入“NoName”字符串)。我无法弄清楚为什么!我试图重写它,但结果相同......

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

检查向量中是否存在名称是错误的。变化

<击>

<击>
if (names[i] == name) {

<击>

if ((std::find(names.begin(), names.end(), name) != names.end()) {

此外,这里似乎不需要for (int i : scores)循环。

std::map最适合这里。此代码段将为您提供帮助

#include <bits/stdc++.h>
using namespace std;

int main() {
    map<string, int> data;
    string name;
    int score;
    for (int n = 0; cin >> name >> score; ++n) {
        if (name != "NoName" || !data.count(name))
            data[name] = score;
    }
    for (auto & i : data)
        cout << i.first << " " << i.second << endl;
    return 0;
}

请参阅http://ideone.com/j3Gkiw

答案 1 :(得分:0)

您的问题出在for for循环中。

您尝试将新元素推入迭代向量的循环内的向量中。向量开始为空,所以程序永远不会进入循环,你永远不会将任何元素推入向量。