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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
hitr
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 10
#1

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

02.07.2012, 00:30. Просмотров 509. Ответов 3
Метки нет (Все метки)

Доброй ночи, суть задачи:
два вектора в одни водится "Имя" во второй значение типа 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( т.е. соедующая попытка ввести целое число завершится ошибкой). Убедитесь, что каждое имя уникально, и выведите сообщение об ошибке, если имя введено дважды.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2012, 00:30     Цикл и два вектора
Посмотрите здесь:

можно ли сложить два вектора??? C++
C++ Как правильно ввести два вектора ?
Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора C++
Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) C++
Ввести два вектора целых чисел и образовать третий вектор с их общих элементов C++
Даны два вектора X(20) и Y(20), найти длины векторов X, Y, X+Y, X-Y C++
Сравнить два вектора размерности n C++
C++ Сформировать два вектора по условию
C++ Заданы два вектора с координатами (Хи Yu Z,) и (Х2, Y2, Z^). Определить угол между векторами
Связать два вектора C++
Заданы два вектора с координатами (x1, y1, z1) и (x2, y2, z2). Определить угол между векторами C++
Дан вектор Z(n). Сформировать два вектора C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Zuzik
 Аватар для Zuzik
228 / 213 / 35
Регистрация: 11.06.2012
Сообщений: 1,392
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
1284 / 946 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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     Цикл и два вектора
Ответ Создать тему
Опции темы

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