Форум программистов, компьютерный форум CyberForum.ru

Цикл и два вектора - C++

Восстановить пароль Регистрация
 
hitr
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 10
02.07.2012, 00:30     Цикл и два вектора #1
Доброй ночи, суть задачи:
два вектора в одни водится "Имя" во второй значение типа int,
нужно сделать проверку на уникальность введенных имен, и не могу понять как сделать, чтобы если имя не уникально то оно не записывалось бы в вектор
Это упражнение первой части 4 главы, упражнение 19 в книге "Программирование. Принципы и практика использования C++"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "std_lib_facilities.h"
#include <vector>
#include<iostream>
int main()
{
    setlocale(0,"");
    vector<string>names;
    vector<int>scores;
    string name=" ";
    int score=0;
    while(name!="No"&&score>=0)
    {
        cin>>name>>score;   
        for(int i=0;i<names.size();i++)
        {
            if(name==names[i])
                cout<<"Данное имя уже есть\n";
        
        }
        names.push_back(name);
        scores.push_back(score);
    }
полное описание задачи:
Напишите программу, в которую сначала вводится набор пар, состоящий из имени и значения, например Joe 17 и Barbara 22. Для каждой пары занесите имя в вектор names, а число - в вектор scores (в сщщтветствующие позиции, так что если names[7]=="Joe", то scores[7]==17). Прекратите ввод, введя строку No more( т.е. соедующая попытка ввести целое число завершится ошибкой). Убедитесь, что каждое имя уникально, и выведите сообщение об ошибке, если имя введено дважды.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Zuzik
 Аватар для Zuzik
218 / 203 / 34
Регистрация: 11.06.2012
Сообщений: 1,331
02.07.2012, 01:01     Цикл и два вектора #2
ваш код почти подходит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "std_lib_facilities.h"
#include <vector>
#include<iostream>
int main()
{
    setlocale(0,"");
    vector<string>names;
    vector<int>scores;
    string name=" ";
    int score=0;
    while(name!="No"&&score>=0)
    {
        cin>>name>>score;   
        for(int i=0;i<names.size();i++)
        {
            if(name==names[i])
                cout<<"Данное имя уже есть\n";
        
        }
        else
        {
        names.push_back(name);
        scores.push_back(score);
        }
    }
hitr
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 10
02.07.2012, 20:26  [ТС]     Цикл и два вектора #3
Цитата Сообщение от Zuzik Посмотреть сообщение
ваш код почти подходит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "std_lib_facilities.h"
#include <vector>
#include<iostream>
int main()
{
    setlocale(0,"");
    vector<string>names;
    vector<int>scores;
    string name=" ";
    int score=0;
    while(name!="No"&&score>=0)
    {
        cin>>name>>score;   
        for(int i=0;i<names.size();i++)
        {
            if(name==names[i])
                cout<<"Данное имя уже есть\n";
        
        }
        else
        {
        names.push_back(name);
        scores.push_back(score);
        }
    }
такое по определению работать не может, if внутри цикла, else после него, если все в один цикл запихнуть то записываться в вектор будет при каждой проверке, ответа пока так и не нашел.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
02.07.2012, 22:44     Цикл и два вектора #4
Предлагаю вот такой вариант по проверки имён, он конечно очень кривой, но как вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>  
#include <string>
#include <vector> 
using namespace std; 
int main() 
{ 
    
    vector<string> vec_str; 
    int count = 0;         // счётчик
    
    string str;  
 
    while(str!="No") 
    { 
      cout << "Vvedite imia " << endl; 
      cin >> str; 
 
      for ( int i = 0; i < vec_str.size(); i++) // проходим до текущего размера вектора
      { 
          if(str == vec_str[i]) // если равно переходим к следующей итерации
              continue; 
          else 
              count++; // иначе +1
      } 
      if(count == vec_str.size() && str!="No") // если счётчик равен текущему размеру  
          vec_str.push_back(str);  // значит имя уникальное, помещаем в вектор
      count = 0;
    } 
 
    for ( int j = 0; j < vec_str.size(); j++) 
        cout << vec_str[j] << " "; 
}
Yandex
Объявления
02.07.2012, 22:44     Цикл и два вектора
Ответ Создать тему
Опции темы

Текущее время: 00:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru