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

Как сократить до инициалов? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
28.12.2010, 15:10     Как сократить до инициалов? #1
Нужно сократить например Фамилия Имя Отчество до Фамилия И. О.
Пожалуйста, подскажите или напишите как это сделать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.12.2010, 15:15     Как сократить до инициалов? #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
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::cout<<"Enter FIO\n";
    std::string str;
    std::getline(std::cin, str);
    std::istringstream ist(str);
    std::string tmp;
    std::vector<std::string> vec;
    while(ist >> tmp)
        vec.push_back(tmp);
    if(vec.size() > 3)
    {
        std::cout<<"Too many words\n";
        return 1;
     }
    for(size_t i=1; i<vec.size(); ++i)
    {
        vec[i]=vec[i][0];
        vec[i]+=".";
    }
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, " "));
    return 0;
}
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
28.12.2010, 16:47  [ТС]     Как сократить до инициалов? #3
Спасибо! Еще бы комментарии , иначе не разберусь
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.12.2010, 17:41     Как сократить до инициалов? #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
33
34
35
36
37
38
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::cout<<"Enter FIO\n";
    std::string str;
    //Ввод строки
    std::getline(std::cin, str);
    //Создание потока
    std::istringstream ist(str);
    std::string tmp;
    //Сюда будут записываться слова
    std::vector<std::string> vec;
    //Читаем из потока до пробела в строку
    while(ist >> tmp)
        //Записываем слова в вектор
        vec.push_back(tmp);
    //Если размер вектора более трех, то есть было введено более 3 слов
    if(vec.size() > 3)
    {
        std::cout<<"Too many words\n";
        return 1;
     }
    //Имя и отчество пишем первый символ и точку вместо строки
    for(size_t i=1; i<vec.size(); ++i)
    {
        vec[i]=vec[i][0];
        vec[i]+=".";
    }
    //Вывод в поток через алгоритм copy
        std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, " "));
    return 0;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2801 / 1577 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
29.12.2010, 18:31     Как сократить до инициалов? #5
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
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
T_str  get_initials(T_str s)
{
    struct  T_to_init
    {
        int  n_;
        T_to_init() : n_() {}
        T_str  operator()(const T_str&  word)
        {           
            return n_ > 2 ? "" : n_++ ? word.substr(0, 1) + '.' : word;            
        }
    };
    std::istringstream            ssin(s);  
    std::istream_iterator<T_str>  ssin_beg(ssin);
    std::istream_iterator<T_str>  ssin_end;
 
    std::ostringstream            sout;
    std::ostream_iterator<T_str>  sout_beg(sout, " ");
 
    std::transform(ssin_beg, ssin_end, sout_beg, T_to_init());
    return  sout.str();
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    T_str  s;
    for(;;)
    {
        std::cout << std::endl
                  << "FIO: ";
        getline(std::cin, s);
        if(s.empty()) break;
        std::cout << get_initials(s)
                  << std::endl;
    }  
}
Yandex
Объявления
29.12.2010, 18:31     Как сократить до инициалов?
Ответ Создать тему
Опции темы

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