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

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

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

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

17.03.2014, 18:23. Просмотров 266. Ответов 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 от остальной строки
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 18:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дана строка в которой будет находится команда на ассемблере. Построчно разбить эту команду на лексе (C++):

Разработайте команду, в которой по виду материала и углу наклона определяется, будет груз покоиться или будет скатываться с транспортера - 1С
Разработайте команду, в которой по виду материала и углу наклона определяется, будет груз покоиться или будет скатываться с транспортера.

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

На каком расстоянии от провода будет находится точка, в которой магнитное поле равно 0 - Электричество и магнетизм
Всем привет! Ломаю голову над простой задачей. Помогите пожалуйста дорешать. По двум длинным параллельным проводам текут токи в...

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

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

Дана строка. В алфавитном порядке напечатайте все строчные латинские согласные буквы, входящие в эту строку - Turbo Pascal
Дана строка. В алфавитном порядке напечатайте (по разу) все строчные латинские согласные буквы, входящие в эту строку. Указание:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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, если есть ещё разделители просто добавьте в " ,;:".
Вторую проблему недопонял...
1
Nikitich369
0 / 0 / 0
Регистрация: 27.05.2013
Сообщений: 12
17.03.2014, 21:36  [ТС] #3
Да чувак уже не суть, спасибо за помощь, помогло !
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 21:36
Привет! Вот еще темы с ответами:

Дана строка. разбить её на две строки, одна должна содержать гласные, другая - согласные - Pascal ABC
Дана строка. разбить её на две строки, одна должна содержать гласные, другая - согласные. Реализовать процедурой

Дана строка, в которой содержится осмысленное текстовое сообщение - C#
ребят над код рограммы а я в этом ниче не понимаю вообщем :Дана строка, в которой содержится осмысленное текстовое сообщение. Слова...

Дана строка текста, в которой слова разделены пробелами. - C++
Доброго времени суток ! Дана лаба: Дана строка текста, в которой слова разделены пробелами. Необходимо: -...

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


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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