MegaCraZy6
@MegaCraZy6
Юзерь

C++ как достать часть из строки?

Я уже задавал вопрос мне ответили но при попытке использовать код который дали все время ошибки и дичь их исправлять....

Нужно из строки достать в другую строку слово ну или как то так. Я хочу написать терминал на С++ ну он будет как обычный даже проще но для практики подойдет и вот когда нужно допустим
run c:\programm.exe
мне нужно проверить какая команда тоесть первых три символа если совпадают то те что дальше в перменную другую засунуть

И прошу как можно проще я новичок и код который мне кинули в прошлом вопросе я даже не понял а я не могу использовать код который не понимаю не по моему это

Спасибо всем кто пытался помочь!
  • Вопрос задан
  • 5077 просмотров
Решения вопроса 3
GavriKos
@GavriKos
Раз вы новичок - то работайте лучше с std::string - упростите себе жизнь. У него есть и copy с какого и по какой символ, и много других плюшек.
Пример тут: www.cplusplus.com/reference/string/string/copy
Ответ написан
Комментировать
@batallador
Потому, что buffer это char * - указатель на первый элемент массива char. И в конструкции if он может выглядеть так *buffer == 's'. если вы хотите использовать std::string::copy , то либо последовательно проверяйте весь скопированный масив, либо создайте вспомогательную std::string :

std::string strCopy = buffer;
if (strCopy == "string") {
...
}

а лучше сразу пользовать std::string::substr
www.cplusplus.com/reference/string/string/substr
Ответ написан
Комментировать
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
В прошлом вопросе ты спрашивал про частный случай для 2 слов, а в эмуляторе терминала их может быть больше, допустим cat file1 file2 > file3. Если делать просто, то используй std::stringstream, инициализируешь его строкой и по слову сохраняешь в list или vector.
#include <iostream>
#include <sstream>
#include <list>
using std::cout;
using std::endl;

int main() {
	std::string str = "cat file1 > file2";
	std::stringstream ss(str);
	
	std::list<std::string> tokens;
	std::string tmpString;
	while(ss >> tmpString)
		tokens.push_back(tmpString);
		
	for(auto token : tokens)
		cout << token << endl;
	return 0;
}

И прошу как можно проще я новичок и код который мне кинули в прошлом вопросе я даже не понял а я не могу использовать код который не понимаю не по моему это

это правильно, в программировании нет места магии :)
spoiler
ну если только совсем чуть-чуть

P.S. на в таком случае будет сложно обрабатывать подобный случай rm -rf "/home/user/some dir" когда в одном из аргументов есть пробел
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы