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

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

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

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

17.03.2014, 18:23. Просмотров 263. Ответов 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     Дана строка в которой будет находится команда на ассемблере. Построчно разбить эту команду на лексе
Посмотрите здесь:

Дана строка s. Вывести эту строку с пробелами между всеми символами. - C++
Дана строка s. Вывести эту строку с пробелами между всеми символами.

Двумерный массив: строка, в которой находится самая длинная серия одинаковых элементов - C++
Дана целочисленная прямоугольная матрица. Определить: 1) Количество столбцов, содержащих хотя бы один нулевой элемент. 2)Номер...

Дана строка латинских букв. После заглавной буквы поставить вставить эту же прописную букву и наоборот - C++
Дана строка латинских букв. После заглавной буквы поставить вставить эту же прописную букву и наоборот. Добавлено через 1 час 11 минут...

Дана строка S. Создать новую строку, состоящую из символов S, у которой к каждому пробелу добавлено два пробела - C++
Дана строка S. Создать новую строку, состоящую из символов S, у которой к каждому пробелу добавлено два пробела

Дана строка S. На её основе создать новую строку символы, которая вместо цифр будет содержать их название. - C++
Дана строка S. На её основе создать новую строку символы, которая вместо цифр будет содержать их название.Например. Для S=&quot;...

Составить программу, в которой определяется строка, сумма элементов которой наибольшая - C++
Задана квадратная матрица. Составить программу, в которой определяется строка, сумма элементов которой наибольшая. Предусмотреть...

Надеюсь Вам не сложно будет выполнить эту задачку - C++
Условие программы на картинке

Дана (построчно) вещественная матрица размером МхН. Переставляя ее строки и столбцы, добиться того, чтобы наибольший - C++
Дана (построчно) вещественная матрица размером М на Н. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (один из...

Вывести строку матрицы в которой находится максимальный элемент - C++
Вот код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; using namespace std; int main() { ...

Обнулить элементы строки, в которой находится минимальный элемент - C++
Дана целочисленная квадратная матрица размера n. Найти максимальный элемент, минимальный элемент из столбца с максимальным элементом и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Да чувак уже не суть, спасибо за помощь, помогло !
Ответ Создать тему
Опции темы

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