С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора - C++
Дано вектор В, состоящий из N действительных чисел. Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые...

Связать два вектора - C++
Здравствуйте.Может кто подскажет,как реализовать такую задачу? Есть два вектора: vector&lt;string&gt; и vector&lt;int&gt;. В первом записан набор...

Сформировать два вектора по условию - C++
Ввести с клавиатуры целые числа M, N и вектор A=(a1, a2,...an), n=15. Вектор должен содержать положительные и отрицательные числа. Найти...

можно ли сложить два вектора??? - C++
если можно то как?

Сравнить два вектора размерности n - C++
Как сравнить два вектора размерности n? Например вектор a(2,3,2) сравнить с вектором b(1,3,3). Какой из векторов больше? Вообще можно ли их...

Как правильно ввести два вектора ? - C++
надо чтобы элементы векторов вводились с клавиатуры, а у меня что-то не получается. и еще надо будет найти сумму векторов, но это я...

3
Zuzik
246 / 234 / 40
Регистрация: 11.06.2012
Сообщений: 1,526
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);
        }
    }
0
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 после него, если все в один цикл запихнуть то записываться в вектор будет при каждой проверке, ответа пока так и не нашел.
0
David Sylva
1291 / 953 / 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] << " "; 
}
1
02.07.2012, 22:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2012, 22:44
Привет! Вот еще темы с ответами:

Дан вектор Z(n). Сформировать два вектора - C++
Дан вектор Z(n). Сформировать два вектора: в первый включите элементы исходного вектора с четными номера, во второй с нечетными номерами.

Даны два вектора X(20) и Y(20), найти длины векторов X, Y, X+Y, X-Y - C++
Помогите найти ошибку, пишет &quot;vector subscript out of range&quot;. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; #include...

Даны два вектора размерности n. Вычислить их скалярное произведение - C++
9. Даны два вектора размерности n. Вычислить их скалярное произведение

Заданы два вектора с координатами (Хи Yu Z,) и (Х2, Y2, Z^). Определить угол между векторами - C++
Заданы два вектора с координатами (Х1 Y1 Z1) и (Х2, Y2, Z2). Определить угол между векторами. Нужно написать простенькую программу на...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.