Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
denys_l
52 / 52 / 10
Регистрация: 26.09.2011
Сообщений: 186
1

strtok()

14.05.2012, 23:55. Просмотров 526. Ответов 0
Метки нет (Все метки)

Необходимо выводить имя в формате Фамилия И. или Фамилия И.О. Для этого решил исполльзовать функцию 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 23:55
Ответы с готовыми решениями:

Использование STRTOK Разбить строку на слова, из слов составить список C++ Функция strtok
Задача Дана строка слов с разделителями, в данном примере слова с пробелами...

strtok
Привет! Решаю задачку на строки char. Возникла проблема вот код: ...

strtok
Почему так работает #include &lt;stdafx.h&gt; #include &lt;conio.h&gt; using namespace...

strtok
Скажите, если ли функция, аналог strtok, для типа string?

strtok
как с помощью функции strtok вывести последнее слово

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 23:55

функция strtok
расскажите алгоритм char str =&quot;- This, a sample string.&quot;; char * pch; ...

strtok не работает
Почему не работает код? #include &lt;string.h&gt; #include &lt;iostream.h&gt; #pragma...

Strtok и strtok_s
Доброго времени суток. Есть вот такой код: Info::Info(ifstream &amp;f) { char...


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

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

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