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

Разбить введенную строку на слова - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввод данных в массив http://www.cyberforum.ru/cpp-beginners/thread370814.html
Пользователь вводит число например 1010111000111110000111100111111101111111. Каждое цифра этого числа должна оказаться в массивеint a. Как сделать так чтобы когда пользователь написав данное число нажал Enter цифры перешли в массив?
C++ Поменять местами диагонали квадратной матрицы Написать функцию, которая меняет местами диагонали квадратной матрицы. Написать программу, которая описывает два двумерных массива: А - размерностью 5х5 и В - 3х3, инициализировав последний массив значениями 5,3,7,-1,-3,-5,4,7,9, а первый ввести с клавиатуры. Применить к обоим массивам указанную функцию и вывести результат на экран. http://www.cyberforum.ru/cpp-beginners/thread370810.html
C++ ПОМОГИТЕ отредактировать задачку!
Я полностью запутался! и уже не понимаю как правильно задан вопрос! вообще уже каша....... Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит восьми: первое число – номер вертикали при счете слева направо, второе – номер горизонтали при счете снизу вверх. Даны натуральные числа k, l, m, n, каждое из которых не превосходит восьми. На поле (k,l)...
C++ Выбор оболочки под C++ для написания конкретной программы
Привет всем ! Проконсультируйте пожалуйста меня по поводу оболочек под C++ Дело в том, что я знаком с MetaTrader4 и с оболочкой под язык MQL4 (программа называется Metaeditor.exe), в которой я недавно закончил писать Тестера для подборки параметров к торговому роботу, - дело здесь в том, что данный тестер работает медленно (как мне кажется), и с помощью специального алгоритма расчета...
C++ Задача Делители (divisors) http://www.cyberforum.ru/cpp-beginners/thread370784.html
Делители (divisors) Определите, какое из первых n натуральных чисел имеет наибольшее количество делителей. Входные данные Единственная строка входного файла divisors.in содержит число n. Выходные данные В выходной файл divisors.out выведите число, что среди первых n натуральных (чисел от 1 до n) имеет наибольшее количество делителей. Если одинаковое максимальное количество делителей...
C++ Итеративный поиск в глубину Здравствуйте! Вопрос связан с поиском в графе. Меня интересуют идеи решения или ссылка на литературу. Пожалуйста, подскажите... Пусть даны 4 числа (пусть это a , b, c, d) и еще одно число ( пусть будет p ). Можно ли, используя основные математические операции (сложение, вычитание, деление и умножение) получить число p из чисел a , b, c, d? При чем данные числа a , b, c, d можно... подробнее

Показать сообщение отдельно
ViT(Vet@l)
27 / 26 / 2
Регистрация: 13.12.2010
Сообщений: 333
24.10.2011, 17:53  [ТС]     Разбить введенную строку на слова
Почему тогда выбивает ошибку \1\main.cpp||In function 'int main()':|
\1\main.cpp|93|error: 'string' was not declared in this scope|


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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
// Функция разбивает строку на слова, основываясь на строке разделителей
// Принимаемые параметры:
//  str - строка, которую необходимо разбить на слова
//  delims - строку, содержащая разделители
// Возвращаемое значение:
//  динамически выделенный массив слов (заканчивающийся нулевым указателем)
char **split_string(const char *str, const char *delims)
{
    // Предварительно считаем длину входной строки
    size_t str_len = strlen(str);
 
    // Счётчик слов в предложении
    size_t words_cntr = 1;
 
    // Результирующий массив слов
    char **words;
 
    // Счётчики циклов
    size_t i, j;
    size_t w;
 
    // Считаем количество слов
    for (i = 0; i < str_len; ++i)
        // Если очередной символ входной строки совпал с одним из разделителей
        if (strchr(delims, str[i]) != NULL)
            // Увеличиваем счётчик слов
            ++words_cntr;
 
    // Выделяем память под массив слов (размером количество слов + 1 элемент для
    // нулевого указателя - конца массива слов)
    words = (char **)malloc((words_cntr + 1) * sizeof(char *));
 
    // Сразу устанавливаем ограничитель массив слов
    words[words_cntr] = NULL;
 
    // Идём по всем символам строки
    for (i = 0, w = 0; i < str_len + 1; ++i)
    {
        // j служит для указания на конеч слова, i - на начало
        // Поиск конца слова начинаем с его начала
        j = i;
 
        // Пока не достигли конца строки или не нашли разделитель
        while (str[j] != '\0' && strchr(delims, str[j]) == NULL)
            // Говорим, что очередной символ строки входит в очередное слово
            ++j;
 
        // Выделяем память под очередное слово
        words[w] = (char *)malloc((j - i + 1) * sizeof(char));
 
        // Копируем слово в выделенную память
        strncpy(words[w], str + i, j - i);
        // Ограничиваем слово нуль-терминатором
        words[w++][j - i] = '\0';
 
        // Продолжаем поиск следующего слова с конца только что обработанного
        i = j;
    }
 
    // Возвращаем сформированный массив слов
    return words;
}
 
// Функция просто очищает память, выделенную под массив слов
void destroy_words(char **words)
{
    size_t i = 1;
 
    while (words[i - 1] != NULL)
        free(words[i++]);
 
    free(words);
}
 
int main(void)
{
    const char *str = "aaa bbb cc eeee d";
    const char *delims = " ";
 
    char **words = split_string(str, delims);
 
    size_t i;
 
    for (i = 0; words[i] != NULL; ++i)
        printf("%s\n", words[i]);
 
    string subject[5]={"I","he","she","it","they"};
    string predicate[5]={"go","stand","fly","say","run"};
    string attribute[5]={"quick", "nice", "slow", "ugly", "normal"};
    string str_1, str_2, str_3;
     for(int i = 0; i < 5; i++){
            if(words[0] != subject[i]){
                if(words[0] == predicate[i])
                    str_2 = words[0];
                if(words[0] == attribute[i])
                    str_3 = words[0];
            }
            else{
                str_1 = words[0];
            }
        }
 
        for(int i = 0; i < 5; i++){
            if(words[1] != predicate[i]){
                if(words[1] == subject[i])
                    str_1 = words[1];
                if(words[1] == attribute[i])
                    str_3 = words[1];
            }
            else{
                str_2 = words[1];
            }
        }
 
 
        for(int i = 0; i < 5; i++){
            if(words[2] != attribute[i]){
                if(words[2] == subject[i])
                    str_1 = words[2];
                if(words[2] == predicate[i])
                    str_2 = words[2];
            }
            else{
                str_3 = words[2];
            }
        }
 
        cout << str_1 << " " << str_2 << " " << str_3;
 
 
 
    cin.get();
 
 
    destroy_words(words);
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru