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

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

Войти
Регистрация
Восстановить пароль
 
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
#1

strtok() - C++

14.05.2012, 23:55. Просмотров 496. Ответов 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 Разбить строку на слова, из слов составить список C++ Функция strtok - C++
Задача Дана строка слов с разделителями, в данном примере слова с пробелами Нужно, используя функцию strtok, сформировать из этих слов...

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

strtok - C++
Привет! Решаю задачку на строки char. Возникла проблема вот код: //vuravnivanie slov po levomy i pravomy pol9m stranicu ...

strtok - C++
Почему так работает #include &lt;stdafx.h&gt; #include &lt;conio.h&gt; using namespace std; int main(){ char string = &quot;a string, of ,...

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

Не работает strtok() - C++
Здравствуйте, нужно посчитать количество слов в файле. Подскажите пожалуйста, что не так. Выводит только первую строку и все, количество...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 23:55
Привет! Вот еще темы с ответами:

функция strtok - C++
расскажите алгоритм char str =&quot;- This, a sample string.&quot;; char * pch; printf (&quot;Splitting string \&quot;%s\&quot; into tokens:\n&quot;,str); ...

Strtok противоположность - C++
Есть ли функция, противоположная strtok? Надо соединить две строки вида массивов char'ov в одну, используя разделитель

Strtok() и string - C++
По заданию нужно воспользоваться именно strtok чтобы разбить строку что есть на слова (ориентируясь на пробелы, все знаки препинания...

strtok не работает - C++
Почему не работает код? #include &lt;string.h&gt; #include &lt;iostream.h&gt; #pragma argsused int main(int argc, char* argv) { ...


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

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

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