Как использовать Input String Stream с символами, разделяющими строки вместо пробелов?
Примечание : я только что узнал о Getline и Streams.
Вместо пробела, разделяющего имя, фамилию и возраст, как я могу разделить их с помощью ^ или -?
Есть ли функция для этого? Это глупый вопрос, и если да, то почему?
-Причина этого вопроса в том, что я собирался создать функцию для решения полиномиальных производных и потерпел неудачу.
int main() {
istringstream inSS; // Input string stream
string lineString; // Holds line of text
string firstName;
string lastName;
int userAge;
getline(cin, lineString);
inSS.str(lineString);
inSS >> firstName;
inSS >> lastName;
inSS >> userAge;
return 0;
}
1 ответ
Свободная функция 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
, вы можете иметь несколько символов, которые будут интерпретироваться как пробел.
Я не уверен, насколько это решает вашу первоначальную проблему написания математического парсера. Общая терминология включает в себя понятия "анализатор" и "лексер", и вы можете исследовать эти концепции для создания надежного математического решателя. Надеюсь, это тоже поможет.