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

strtok() - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Алгоритм планирования процессов First-Come, First-Served (FCFS) http://www.cyberforum.ru/cpp-beginners/thread574773.html
Проюзал инет и не нашёл вообще информации( Кинте ссылку, на инфу З.Ы. Админ, извини, не знаю в какой раздел форума запостить
C++ Матрица Помогите сделать прогу(С++). Матрица 6х4 найти в ней мин. и макс. элемент и поменять их местами. Спасибо. http://www.cyberforum.ru/cpp-beginners/thread574769.html
C++ ANSI или UNICODE?
Как определить в свойствах программы какой тип символов должен быть использован? Где в Microsoft Visual Studio можно это увидеть?
Помогите с textbox пожалуйста C++
нужно чтобы цикл каждый раз вписывал букву в следующий текстбокс, то есть его номер должен совпадать с i String^ s="academia"; for (int i=0; i<8; i++) { char a=s; if (s=='a') { this->textBox1->AppendText("а");
C++ Структура "рациональное число" http://www.cyberforum.ru/cpp-beginners/thread574752.html
Вот само задание: Рациональное число можно представить записью с двумя полями: числитель и знаменатель. Разработать процедуру, позволяющую из неправильной дроби сделать правильную. Неправильной называется дробь, у которой числитель больше знаменателя. #include <iostream> #include <string.h> using namespace std; class Fraction { int sign; int intPart; int numerator; int denoninator; };
C++ Как правильно записать формулу ? вот функция подробнее

Показать сообщение отдельно
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
14.05.2012, 23:55     strtok()
Необходимо выводить имя в формате Фамилия И. или Фамилия И.О. Для этого решил исполльзовать функцию 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru