Я пытаюсь решить проблему на spoj. По-видимому, входные строки заканчиваются \r\n
в соответствии с комментариями. То, что я знаю о \r\n
из предыдущих вопросов, - это то, что у него есть дело с окнами. Я хочу знать, как это учитывать. В настоящее время я использую getline(cin,str)
в C++. Что нужно сделать, чтобы принять во внимание \r\n.
Принимая во внимание r n
ответ
При использовании std::getline(std::cin, str)
'\n'
уже позаботилась о: std::getline()
будет читать символы до тех пор, пока не найдет '\n'
и вставляет их в str
. Однако он не вставляет '\n'
.
Таким образом, вы можете застрять с '\r'
в конце строки. Если вы находитесь в Windows, вы можете просто открыть свой файл в текстовом режиме, и поток также извлечет их. Если это не путь, вы можете просто определить, если ваш str
заканчивается '\r'
и удалить его:
if (!str.empty() && str[str.size() - 1] == '\r') {
str.erase(str.end() - 1);
}
Если вы хотите, чтобы удалить все символы возврата каретки (может, в теории, вложенные в строке), вы можете использовать
str.erase(std::remove(str.begin(), str.end(), '\r'), str.end());
Наконец, если вы не хотите, чтобы когда-либо столкнуться с возврата каретки, вы можете создать поток буфера фильтрации, которая просто удаляет все '\r'
(или только те из "\r\n"
последовательности). Ниже приведен краткий пример того, как можно реализовать простой буфер потока фильтрации:
#include <algorithm>
#include <iostream>
#include <streambuf>
#include <string>
class crfilter
: std::streambuf
{
std::istream* stream;
std::streambuf* sbuf;
char buffer[8];
int underflow() {
std::streamsize n;
while (this->gptr() == this->egptr()
&& (n = this->sbuf->sgetn(buffer, 8))) {
char* end = std::remove(buffer, buffer + n, '\r');
this->setg(buffer, buffer, end);
}
return this->gptr() == this->egptr()
? std::char_traits<char>::eof()
: std::char_traits<char>::to_int_type(*this->gptr());
}
public:
crfilter(std::istream& in): stream(&in), sbuf(in.rdbuf(this)) {}
~crfilter() { stream->rdbuf(this->sbuf); }
};
int main()
{
crfilter filter(std::cin);
std::string str;
while (std::getline(std::cin, str)) {
std::cout << "str='" << str << "'\n";
}
}
Это каретки возврата/строки, которые сообщают вам о конце строки и начале следующего.
Я уверен, что OP уже это знает. Я думаю, что его вопрос больше связан с тем, как вырезать их/добавить их обратно во время чтения/записи файла. – Praetorian
- 1. Сортировка принимая случай во внимание
- 2. назначение Цели не принимая воронку во внимание
- 3. Принимая во внимание обратное проектирование/разборку
- 4. Сравните два DataTables, принимая сортировкой во внимание
- 5. Принимая во внимание временные поля в JPQL
- 6. Принимая во внимание специальные символы в поиске
- 7. андроид расколол круг, не принимая во внимание
- 8. Как сосчитать предложения, принимая во внимание возникновение эллипсов
- 9. Play 2.1/принимая во внимание javaagent во время выполнения тестов
- 10. Как я могу динамически генерировать даты, принимая во внимание праздники?
- 11. PHP не Curl принимая тайм-аутов во внимание
- 12. Пытается преобразовать html div в изображение. Принимая во внимание Transform3D
- 13. SQL: Совокупные записей внутри группы, принимая во внимание строк заказать
- 14. iOS7 скриншот не принимая во внимание эффект размытия
- 15. Высота области содержимого 100% принимая во внимание заголовок
- 16. Визуальное окно студии Watch не принимая во внимание usings
- 17. усы/hogan i18n и принимая во внимание порядок слов
- 18. переместите камеру к ней, указав направление, принимая во внимание поворот
- 19. Принимая во внимание каждый элемент в разреженной матрице?
- 20. ElasticSearch принимая порядок слов во внимание в запросе соответствия
- 21. изменить ldap пароль с phpldap принимая во внимание назначенные политики
- 22. выражение NSDictionaryResultType не принимая во внимание недавно вставленные объекты
- 23. Возвращает значение, принимая во внимание как дату и номер
- 24. Использование За исключением, принимая во внимание количество дублированного
- 25. Как .value_count() строки, принимая во внимание другие столбцы?
- 26. Записи о Глобализации3, переведенные атрибуты и принимая во внимание недостатки
- 27. лея-TextField не принимая ngModel изменения во внимание
- 28. SQL разработать продаж на продукт, принимая во внимание возраст
- 29. UIScrollView scrollRectToVisible: анимированные: не принимая во внимание прямоугольник на iOS7
- 30. MySQL, Принимая во внимание список, выбирая недостающие строки из таблицы
Как бы вы хотели «принять их во внимание»? – lurker
@mbratch как в том, как избавиться от него и сохранить строку в строковом объекте – ishan3243