Бесплатная функция getline
также предлагает иметь собственный разделитель, например, как user4581301. Тем не менее, он будет извлекать только string
с, и у вас также есть int
.
Аналогичное решение можно найти в этом ответе, и я изменил код в соответствии с вашими потребностями: изменение разделителя для cin (c ++)
Вы можете использовать imbue
, чтобы иметь собственный разделитель. Простой пример ниже:
#include <locale>
#include <iostream>
template<char Delim>
struct alternativeDelimiter : std::ctype<char> {
alternativeDelimiter() : std::ctype<char>(get_table()) {}
static mask const* get_table()
{
static mask rc[table_size];
rc[Delim] = std::ctype_base::space;
return &rc[0];
}
};
int main() {
using std::string;
using std::cin;
using std::locale;
cin.imbue(locale(cin.getloc(), new alternativeDelimiter<'^'>));
string word;
while(cin >> word) {
std::cout << word << "\n";
}
}
imbue
вступает во владение ctype
, так что не беспокойтесь о звонке, удалите себя.
Если вы введете some^text
, вывод будет
some
text
Конечно, вы также можете использовать его с вашим примером.
Если вы расширите таблицу, написав строки, аналогичные строке 11 (rc[Delim] = std::ctype_base::space
), и измените только Delim
, у вас может быть несколько символов, которые будут интерпретироваться как пробел.
Я не уверен, насколько это решает вашу первоначальную проблему написания математического парсера. Общая терминология включает в себя понятия «анализатор» и «лексер», и вы можете исследовать эти концепции для создания надежного математического решателя. Надеюсь, это тоже поможет.