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

Фамилии - C++

Восстановить пароль Регистрация
 
ВАваф
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 39
07.12.2013, 14:11     Фамилии #1
Дан список фамилий. Вывести отдельно мужские фамилии, женские и фамилии, по которым нельзя определить пол.

Не могу разобраться с этой задачей... Если бы вводился пол человека, все ясно, а так ничего не понимаю.. Друг посоветовал работать через векторы, единственное, что я пока смог понять и найти в интернете, это ввод и вывод вектора. В общем, помогите решить задачу, пожалуйста...
Если не затруднит, писать краткие объяснения

Вот пока что, что есть:
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <vector>
#include <string>
#include <clocale>
#include <windows.h>
using namespace std;
int main ()
{setlocale(LC_ALL, "");
std::vector<std::string> students; // Создание вектора из строк
std::string mesto = "";    // Буфер для ввода фамилии студента
std::cout << "Вводите фамилии студентов, "
              << "по окончанию ввода, введите пустую строку" << std::endl;
do {
        std::getline(std::cin, mesto);
        if (mesto.size() > 0) {            // Добавление элемента в конец вектора
            students.push_back(mesto);
        }
    } while (mesto != "");              
unsigned int vector_size = students.size();     // Сохраняем количество элементов вектора 
std::cout << "Фамилии:" << std::endl;
    for (int i = 0; i < vector_size; i++) {             // Вывод заполненного вектора на экран
        SetConsoleCP(1251);
        std::cout << students[i] << std::endl; 
    }
_getch ();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2013, 14:11     Фамилии
Посмотрите здесь:

сортировка по фамилии C++
C++ Сортировка по фамилии
Распознавание имени и фамилии C++
Сортировка по фамилии C++
C++ Сортировка по фамилии в структуре
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yanush
 Аватар для Yanush
154 / 150 / 44
Регистрация: 28.09.2013
Сообщений: 281
Завершенные тесты: 1
07.12.2013, 15:13     Фамилии #2
Это по сути невозможно. Есть конечно некоторые, которые можно точно выделить (например: "ин", "ов" для мужских). Большинство будут попадать в категорию, по которым невозможно определить пол.
Самый приемлемый вариант это открыть список фамилий и выделить наиболее часто встречающиеся окончания, а остальные кидать в 3ю категорию.
ВАваф
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 39
07.12.2013, 18:24  [ТС]     Фамилии #3
Цитата Сообщение от Yanush Посмотреть сообщение
Это по сути невозможно. Есть конечно некоторые, которые можно точно выделить (например: "ин", "ов" для мужских). Большинство будут попадать в категорию, по которым невозможно определить пол.
Самый приемлемый вариант это открыть список фамилий и выделить наиболее часто встречающиеся окончания, а остальные кидать в 3ю категорию.
Я понимаю, просто я не знаю, как рассмотреть окончания слов, мне это надо...

Препод просто такой... Нифига не объясняет, требует дофига...

Добавлено через 3 часа 8 минут
Heeeelp
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
07.12.2013, 19:31     Фамилии #4
Универсально такую штуку не напишешь это факт.
Вряд ли от вас требуют реализации действительно сложного алгоритма.
можно взять всего по 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <clocale>
#include <string.h>
 
 
using namespace std;
 
const char W[]={'а','я'};
const char M[]={'н','в'};
 
 
int main()
{
  //setlocale(LC_ALL,"");
  string S;
  getline(cin,S);
 
 
 
  int len=S.size()/sizeof(char);
  int len_w = sizeof(W)/sizeof(*W);
 
 
    for (int i=0;i<len_w;i++)
    {
        switch (S[len-1])
        {
            case 'а'-64: setlocale(LC_ALL,"");  cout<<"Женская\n"; return 0; break;
            case 'я'-16: setlocale(LC_ALL,"");  cout<<"Женская\n"; return 0; break;
            case 'н'-64: if (S[len-2]=='и'-64)
                         {
                            setlocale(LC_ALL,"");
                            cout<<"Мужская\n";
                            return 0;
                          }
                          else break;
 
            case 'в'-64: setlocale(LC_ALL,"");  cout<<"Мужская\n"; return 0; break;
        }
    }
 
     setlocale(LC_ALL,""); cout<<"не могу определить\n";
    return 0;
}
Yandex
Объявления
07.12.2013, 19:31     Фамилии
Ответ Создать тему
Опции темы

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