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

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

Войти
Регистрация
Восстановить пароль
 
Grovello
12 / 12 / 0
Регистрация: 09.06.2012
Сообщений: 92
#1

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

07.10.2012, 21:45. Просмотров 914. Ответов 3
Метки нет (Все метки)

Добрый день, решая задачу создания программы, которая по введению команд совершала работу со множествами столкнулся с проблемой чтения команд после ввода.
Заготовка:
Кликните здесь для просмотра всего текста
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(второе)
Может стоит считывать строку в чаровский массив и посимвольно копировать в другой массив, пока не пробел?
И еще надо принять во внимание, что программа должна работать в двух режимах: командной строки и чтения команд из файла.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2012, 21:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разбиение string на команды и значения (C++):

Почему после выполнения команды cprintf значения строк затираются? - C++
Здраствуйте. Помогите пожалуйста, что это может быть, что вот уже больше дня играюсь с билдером и он непонятно что творит. Например,...

Не корректно принимаются значения string - C++
Доброго времени суток форумчане. Столкнулся с проблемой. Есть класс Apartment class Apartment { private: int num_room, floor; ...

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

Как vector<string> присвоить конкретные значения? - C++
Как vector&lt;string&gt; присвоить конкретные значения? Когда навожу на знак &quot;=&quot;, возникает ошибка &quot;требуется точка с запятой &quot;;&quot;&quot; const int...

XE3 выдаёт ошибки при попытке присвоения значения переменной string - C++
Новый Builder С++ почему-то ругается на то что в старой версии (2006) работало. Может кто знает причину изменений. вот листинг: ...

Избыточный перенос на новую строку при отображении значения типа string - C++
Когда ввожу проиpвольное значение в терминал, к примеру: asdsad dfadf. То программа выдает ответ: Output: asdsad dfadf. Т.е...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
07.10.2012, 23:12 #2
Строку можно вводить и через обычный cin, при нажатии на пробел, он устанавливает конец строки.
Сравнивать строки можно с помощью strcmp(str1, str2):
- если = 0 - строки одинаковы;
- если > 0 str1 > str2;
- если < 0 str1 < str2.
1
Grovello
12 / 12 / 0
Регистрация: 09.06.2012
Сообщений: 92
09.10.2012, 16:20  [ТС] #3
Цитата Сообщение от ReasonX7 Посмотреть сообщение
Строку можно вводить и через обычный cin, при нажатии на пробел, он устанавливает конец строки.
Сравнивать строки можно с помощью strcmp(str1, str2):
- если = 0 - строки одинаковы;
- если > 0 str1 > str2;
- если < 0 str1 < str2.
Тут невозможно предугадать какие именно параметры задаст пользователь, поэтому сравнивать нельзя, нужно именно разбивать и сверять по словам.

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

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

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

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

Добавлено через 8 часов 5 минут
Еще раз вверх.
Последний вверх непонимания.
Наверное, я не корректно сформулировал вопрос или что-то еще, ведь люди смотрят тему, но даже об этом не отписываются.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.10.2012, 17:33 #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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2012, 17:33
Привет! Вот еще темы с ответами:

Ввод значения в переменную типа string, память под которую выделена динамически - C++
Ребят, подскажите пожалуйста, как организовать ввод значения в переменную типа string, память под которую выделена динамически? ...

Вывод из вектора самого короткого и самого длинного string значения - C++
Вывод из вектора самого короткого и самого длинного string значения Подскажите как таковое сделать, если кому не трудно сможете ли вы...

В массиве записаны результаты N игр футбольной команды. Определить количество выигрышей, количество проигрышей и количество ничьих данной команды. - C++
Помогите пожалуйста решить задачу. НА С# труда не составляет а вот на С++ не получается. 1. В массиве записаны результаты N игр...

Разбиение String массива на int и String массивы - Java SE
так-с. из файла я записал в массив tempmas слова, например &quot;0PlPs1&quot; или &quot;1VKG&quot;. нужно брать слово и разбивать её на 2 строки: 1 строка в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.10.2012, 17:33
Ответ Создать тему
Опции темы

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