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

функция strtok - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Графы http://www.cyberforum.ru/cpp-beginners/thread265506.html
Имеется сеть автомобильных дорог. Известны расстояния всех участков дорог. Некоторые участки аварийноопасны. Требуется найти путь из пункта А в пункт В, имеющий наименьшую суммарную протяженность аварийноопастных участков. Никак не могу додуматься как реализовать... Помогите плз
C++ Организовать два индексных файла для быстрого поиска информации В файле записаны фамилии студентов и их анкетные данные, включающие номера паспорта и зачетной книжки. Организовать два индексных файла для быстрого поиска информации по любому из этих номеров. Помогите пожалуйста http://www.cyberforum.ru/cpp-beginners/thread265505.html
Как сделать обработчик для меню? C++
Я для для программы на c++ сделал меню, подскажите как сделать обработчик и куда этот код потом вставлять???
C++ Матрицы(max and min)
Переставить местами строки содержащие первый максимальный элемент и последний минимальный Элемент в Матрице
C++ 3D-модели http://www.cyberforum.ru/cpp-beginners/thread265457.html
Передо мной поставили следующую задачу: разработать приложение, в котором бы отображалась достаточно сложная и детализированная модель объекта (в моем случае это модель котельной). Причем этот объект можно: 1)вращать, поворачивать, крутить 2) при щелчке на элемент котельной открывается окно с характеристиками объекта и мн. др, но для начала этого хватит Что мне использовать для этого? С...
C++ завершение старого процесса Как можно выполнить завершение одного процесса, при открытии другого? Допустим завершения програамы при _spawnl(_P_WAIT,".\\discovery.exe","discovery.exe", ".\\date.ini", NULL); exit(0); ведь программа не закроется пока не закроется просесс "discovery.exe" Как можно это обойти? Добавлено через 8 часов 33 минуты может эту тему в другой раздел перенести или все-таки кто знает? подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
23.06.2013, 15:57     функция strtok
Цитата Сообщение от beta-particle Посмотреть сообщение
@Nameless One, а, допустим, что я хочу вывести этот так скажем "массив из слов", то что нам нужно сделать?
Я так понимаю, главный вопрос в том, как сформировать этот массив? Потому что вывод массива тривиален: в цикле для каждого элемента массива выводишь этот элемент.

Для формировании массива есть два подхода. Первый подразумевает, что максимально возможное число элементов массива заранее известно, и количество элементов массива при любых входных данных не может превышать это число. Тогда нужно просто объявить статический массив достаточного размера. При втором подходе объявляется динамический массив, размер которого увеличивается при необходимости.

Вот пример со вторым подходом: программа получает входную строку (и, возможно, строку разделителей), разбивает эту строку на слова (токены) по разделителям, помещая эти разделители в массив, и выводит этот массив:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
static const char *help =
    "splitter - print tokens of SENTENCE separated by DELIMETERS\n"
    "Usage: splitter SENTENCE [DELIMETERS]\n";
 
static const char *delimeters = ",.?!():-; \t\n";
 
int main(int argc, char *argv[])
{
    char *sentence;
    char **tokens = NULL;
    char *token;
 
    size_t tokens_count = 0;
    size_t tokens_size = 0;
    size_t next_size = 4;
 
    size_t i;
 
    /* handle command-line arguments */
    switch(argc)
    {
    case 2:
        sentence = argv[1];
        break;
 
    case 3:
        sentence = argv[1];
        delimeters = argv[2];
        break;
 
    default:
        fprintf(stderr, "%s: not enough or extra arguments\n", argv[0]);
        fputs(help, stderr);
        exit(1);
    }
 
    /* split SENTENCE into an array of tokens */
    for(token = strtok(sentence, delimeters); token != NULL; token = strtok(NULL, delimeters))
    {
        if(tokens_count == tokens_size)
        {
            tokens_size = next_size;
            next_size *= 2;
            tokens = realloc(tokens, tokens_size * sizeof *tokens);
        }
 
        tokens[tokens_count++] = token; /* or `= strdup(token);` */
    }
 
    /* print the array of tokens */
    for(i = 0; i < tokens_count; ++i)
        puts(tokens[i]);
 
    if(tokens != NULL)
        free(tokens);
 
    exit(0);
}
Цитата Сообщение от Thinker Посмотреть сообщение
не каждого, а только первого из каждой серии подряд идущих разделителей
И правда. Ну, это логично, в принципе.
 
Текущее время: 09:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru