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

Разбиение string на команды и значения - C++

Восстановить пароль Регистрация
 
Grovello
 Аватар для Grovello
12 / 12 / 0
Регистрация: 09.06.2012
Сообщений: 92
07.10.2012, 21:45     Разбиение string на команды и значения #1
Добрый день, решая задачу создания программы, которая по введению команд совершала работу со множествами столкнулся с проблемой чтения команд после ввода.
Заготовка:
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <iostream>
#include <string>
 using namespace std;
 
 struct List //Список элементом множества
 {
 int data;
 List*next;
 }
 
 struct SetList //Главный список
 {
 string name;
 SetList*Setnext;
 List*nextlist;
 }
 
  List *head;
   void addElement(int element)
 {
     if(head==NULL)
     {
     head=newList();
     head.data=element
         head.next=NULL;
    return;
     }
 }
   void main()
   {
       string mine[5];
       string str;
 
       mine[0] = "new"; //Команды
       mine[1] = "add";
       mine[2] = "del";
       mine[3] = "union";
       mine[4] = "intersec";
     
      
     cin.getline>>str;//Считывание команды и запись ее в str

Насколько я понимаю, команда разбиения на слова - strtok(str, разделитель(" "));
Но я не понимаю как в данном случае считать последовательность команд в строке, например
del(команда удаления элемента) abc(название множества) a(элемент)
или
intersec(пересечение множеств) abc(первое) abd(второе)
Может стоит считывать строку в чаровский массив и посимвольно копировать в другой массив, пока не пробел?
И еще надо принять во внимание, что программа должна работать в двух режимах: командной строки и чтения команд из файла.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2012, 21:45     Разбиение string на команды и значения
Посмотрите здесь:

C++ Почему после выполнения команды cprintf значения строк затираются?
C++ char char* string и константные значения
C++ Как используя C-String а потом и String class варьировать вывод?
В массиве записаны результаты N игр футбольной команды. Определить количество выигрышей, количество проигрышей и количество ничьих данной команды. C++
Ввод значения в переменную типа string, память под которую выделена динамически C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ReasonX7
 Аватар для ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 146
07.10.2012, 23:12     Разбиение string на команды и значения #2
Строку можно вводить и через обычный cin, при нажатии на пробел, он устанавливает конец строки.
Сравнивать строки можно с помощью strcmp(str1, str2):
- если = 0 - строки одинаковы;
- если > 0 str1 > str2;
- если < 0 str1 < str2.
Grovello
 Аватар для Grovello
12 / 12 / 0
Регистрация: 09.06.2012
Сообщений: 92
09.10.2012, 16:20  [ТС]     Разбиение string на команды и значения #3
Цитата Сообщение от ReasonX7 Посмотреть сообщение
Строку можно вводить и через обычный cin, при нажатии на пробел, он устанавливает конец строки.
Сравнивать строки можно с помощью strcmp(str1, str2):
- если = 0 - строки одинаковы;
- если > 0 str1 > str2;
- если < 0 str1 < str2.
Тут невозможно предугадать какие именно параметры задаст пользователь, поэтому сравнивать нельзя, нужно именно разбивать и сверять по словам.

Добавлено через 10 часов 11 минут
Вверх

Добавлено через 8 часов 5 минут
Еще раз вверх.

Добавлено через 22 часа 40 минут
Цитата Сообщение от Grovello Посмотреть сообщение
Тут невозможно предугадать какие именно параметры задаст пользователь, поэтому сравнивать нельзя, нужно именно разбивать и сверять по словам.

Добавлено через 10 часов 11 минут
Вверх

Добавлено через 8 часов 5 минут
Еще раз вверх.
Последний вверх непонимания.
Наверное, я не корректно сформулировал вопрос или что-то еще, ведь люди смотрят тему, но даже об этом не отписываются.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.10.2012, 17:33     Разбиение string на команды и значения #4
Grovello, вот вам функция разбиения строки на слова по указанным разделителям:
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
#include <vector>
#include <string>
 
std::vector<std::string> split(const std::string& string, const char *separators)
{
    std::vector<std::string> result;
    
    if (string.empty())
        return result;
    
    std::string word;
    std::string::size_type word_start = string.find_first_not_of(separators);
    std::string::size_type word_end;
    
    while (  (word_end = string.find_first_of(separators, word_start)) != std::string::npos
           && word_start                                               != std::string::npos)
    {
        result.push_back(string.substr(word_start, word_end - word_start));
        word_start = string.find_first_not_of(separators, word_end);
    }
    
    if (word_start != std::string::npos)
        result.push_back(string.substr(word_start, string.length() - word_start));
    
    return result;
}
Yandex
Объявления
09.10.2012, 17:33     Разбиение string на команды и значения
Ответ Создать тему
Опции темы

Текущее время: 23:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru