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

strtok() - C++

Восстановить пароль Регистрация
 
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
14.05.2012, 23:55     strtok() #1
Необходимо выводить имя в формате Фамилия И. или Фамилия И.О. Для этого решил исполльзовать функцию strtok. Т.е. сначала я вывожу полностью фамилию, а затем имя и, в случае, если есть отчество, то и отчество (например, такие имена как Бьерн Страуструп отчества не имеют, поэтому вывести необходимо только Бьерн С.). Одну и тоже фамилию придется выводить больше одного раза. Тут возникли проблемы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
    char text[100] = "Ivanov Ivan Ivanovich";
    for (int i=0; i<2; i++)
    {
        char *tok = strtok(text, " ");
        if(tok)
        {
            cout << tok << " ";
            while((tok=strtok(NULL, " "))) cout << tok[0] << '.';
        }
        cout << endl;
    }
    return 0;
}
Дело в том, что в последующих итерациях выводится только фамилия, а остальные инициалы опускаются. Надо бы как-то исправить

Добавлено через 7 минут
На зарубежном форуме нашел решение.
...the seconed argument to strtok will be replaced
by NULL's. The best thing to do is keep abuffer with the orignal string
in it.
Переписал следующим образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
    char text[100] = "Ivanov Ivan Ivanovich";
    char *buf = NULL;
    for (int i=0; i<2; i++)
    {
        buf = new char[strlen(text)+1];
        strcpy(buf,text);
        char *tok = strtok(buf, " ");
        if(tok)
        {
            cout << tok << " ";
            while((tok=strtok(NULL, " "))) cout << tok[0] << '.';
        }
        cout << endl;
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 23:55     strtok()
Посмотрите здесь:

strtok C++
strtok C++
C++ warning strtok
C++ strtok
C++ Двойной strtok
strtok C++
C++ Strtok противоположность
Использование STRTOK Разбить строку на слова, из слов составить список C++ Функция strtok C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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