Мой входной файл, как это:Читать входной файл с обратной косой черты () разделителем C++
C:\Users\DeadCoder\AppData\Local\CoCreate
творю дерево, и мне нужно абстрагировать имена каталогов при чтении из входного файла с \
разделителем. Как и в приведенном выше примере, мне нужно отдельно отделить пользователей c :, DeadCoder, Appdata .... Надеюсь, каждый понимает вопросы. Теперь рассмотрим варианты, которые у нас есть.
1-
istringstream
работает отлично для whitespace
, но не для \
.
2-
strtok()
работает на char. Поэтому мне пришлось бы изменить свою строку на char, и я действительно не хочу этого делать.
3- Boost Tokenizer()
Это кажется интересным, и у меня нет никакого знакомства с ним в прошлом, за исключением того, что я только что заглянул в него пораньше. Я скопировал код и он выглядит так:
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>
using namespace boost;
int main(){
string tempStr;
ifstream fin;
fin.open("input.txt");
int i=0;
while (!fin.eof()){
getline(fin,tempStr);
char_separator<char> sep("\"); // error: missing terminating " character
tokenizer<char_separator<char>> tokens(tempStr, sep);
for (const auto& t : tokens) {
cout << t << "." << endl;
}
}
Теперь это дает ошибку, что "error: boost/foreach.hpp: No such file or directory"
может кто-то помочь мне здесь. И есть ли еще better way
для чтения входного файла с \ delimiter
. Пожалуйста, не используйте расширенные коды, такие как class tokenizer()
, поскольку я все еще изучаю C++.
EDIT: У меня не было установленной библиотеки boost, поэтому у меня была эта ошибка. было бы очень полезно, если кто-то может объяснить лучший способ для строки tokenize
без установки третьей библиотеки.
Лучшее; DeadCoder.
У вас установлена библиотека 'Boost'? – Mahesh
Нет. Разве это не по умолчанию. – DeadCoder
Это сторонняя библиотека. Загрузите его с http://www.boost.org/ – Mahesh