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

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

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

Дана строка в которой будет находится команда на ассемблере. Построчно разбить эту команду на лексе - C++

17.03.2014, 18:23. Просмотров 242. Ответов 2
Метки нет (Все метки)

Подскажите пожалуйста что делать ! У меня такое задание :
Дана строка в которой будет находится какая-нибудь команда на ассемблере
Например : m1:mov ax,bx;comments
Нужно построчно разбить эту команду на лексемы (без раздилителей), чтобы все это выглядело вот так
m1
mov
ax
bx
comments
Так же проблема заключается в том, что мой препод может потребовать написать строку в которой может отсутствовать один из элементов, например метка (m1: ), тогда преобразованная строка должна будет выглядеть так :
(вместо m1 тут будет пробел)
mov
ax
bx
comments
Вот моя неудачная попытка в которой я пытался сделать хотя бы так чтобы стандартная строка разбивалась на лексемы
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
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
    setlocale (0,"");
    string s=" m1:mul ax,bx;commend"; // Введенная строка
    string::size_type g = s.find(':'); // В строке идет поиск символа :
    string s4 = s.substr(g+1, s.find(' ')-g-1); /* Когда символ найден, он по-идее должен записывать в переменную  символы которые встречаются до знака пробел. */
    cout<<s4<<endl;
    string::size_type z = s.find(' ');
    string s1 = s.substr(z+1, s.find(',')-z-1);
    cout<<s1<<endl;
    string::size_type x = s.find(',');
    string s2 = s.substr(x+1, s.find(';')-x-1);
    cout<<s2<<endl;
    string::size_type y = s.find(';');
    string s3 = s.substr(y+1, s.find('\0')-y-1);
    cout<<s3<<endl;
    system("pause");
    return 0;
}
Но проблема заключается в том, компилятор никак не воспринимает пробелы, и я не знаю как сделать так чтобы он отделил метку m1 от остальной строки
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 18:23     Дана строка в которой будет находится команда на ассемблере. Построчно разбить эту команду на лексе
Посмотрите здесь:

C++ Дана строка текста, в которой слова разделены пробелами.
C++ Дана символьная матрица, каждая строка которой является предложением. Для каждой строки определить количество слов.
C++ Дана строка s. Вывести эту строку с пробелами между всеми символами.
C++ Составить программу, в которой определяется строка, сумма элементов которой наибольшая
Дана строка до точки, группа символов в которой между пробелами считается словом, знаки препинания от слова пробелом не отделяются C++
Дана строка S. На её основе создать новую строку символы, которая вместо цифр будет содержать их название. C++
C++ Дана строка текста, в которой слова разделены символами "#" и пробелами
Дана строка до точки, группа символов в которой между пробелами считается словом, знаки препинания от слова пробелом не отделяются C++
C++ Дана строка латинских букв. После заглавной буквы поставить вставить эту же прописную букву и наоборот
C++ Дана строка S. Создать новую строку, состоящую из символов S, у которой к каждому пробелу добавлено два пробела
C++ Дана строка до точки, группа символов в которой между пробелами считается словом
C++ Двумерный массив: строка, в которой находится самая длинная серия одинаковых элементов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
17.03.2014, 19:39     Дана строка в которой будет находится команда на ассемблере. Построчно разбить эту команду на лексе #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    std::string str;
    std::cout << "Type command: ";
    getline(std::cin, str);
    
    char* chStr = new char[str.size() + 1];
    std::strcpy(chStr, str.c_str());
    
    char* p = std::strtok(chStr, " ,;:");
    while(p != NULL)
    {
        std::cout << p << "\n";
        p = strtok(NULL, " ,;:");
    }
    
    system("pause");
    return 0;
}
Nikitich369, если есть ещё разделители просто добавьте в " ,;:".
Вторую проблему недопонял...
Nikitich369
0 / 0 / 0
Регистрация: 27.05.2013
Сообщений: 12
17.03.2014, 21:36  [ТС]     Дана строка в которой будет находится команда на ассемблере. Построчно разбить эту команду на лексе #3
Да чувак уже не суть, спасибо за помощь, помогло !
Yandex
Объявления
17.03.2014, 21:36     Дана строка в которой будет находится команда на ассемблере. Построчно разбить эту команду на лексе
Ответ Создать тему
Опции темы

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