переменные — C ++ Чтение ввода с разделителями табуляцией и пропуск пустых полей

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

Вот код, который у меня есть до сих пор:

string dummy;
string FAImport;
cin.ignore(1000, '\n');
cout << "\nPlease copy and paste the information from the finding aid and press Enter: ";
getline(cin, FAImport);
cout << FAImport;

stringstream ss(FAImport);

auto temp = ctype<char>::classic_table();
vector<ctype<char>::mask> bar(temp, temp + ctype<char>::table_size);

bar[' '] ^= ctype_base::space;

ss.imbue(locale(cin.getloc(), new ctype<char>(bar.data())));

ss >> coTitle >> altTitle >> description >> dateSpan >> edition >> publisher >>
physicalDescription >> scale >> extentField >> medium >> dimensions >> arrangement >>
degree >> contributing >> names >> topics >> geoPlaceNames >> genre >> occupations >>
functions >> subject >> langIN >> audience >> condition >> generalNotes >> collection >>
linkToFindingAid >> source >> SIRSI >> callNumber;

checkFAImport(); //shows the values of each variable
cout << "\n\nDone";

С помощью этого кода я получаю этот вывод после ввода метаданных:

coTitle = William Gates photograph with Emiliano Zapata
altTitle = 1915
description = 1915
datespan = Electronic version
edition = 1 photograph : sepia ; 11 x 13 cm
publisher = L. Tom Perry Special Collections, Harold B. Lee Library, Brigham Young University
physicalDescription = Photographs
scale = William Gates papers
extentField = http://findingaid.lib.byu.edu/viewItem/MSS%20279/Series%2011/Subseries%205/Item%20979/box%20128/folder%2012
medium = William Gates photograph with Emiliano Zapata; MSS 279; William Gates papers; L. Tom Perry Special Collections; 20th Century Western & Mormon Manuscripts; 1130 Harold B. Lee Library; Brigham Young University; Provo, Utah 84602; http://sc.lib.byu.edu/
dimensions = MSS 279 Series 11 Subseries 5 Item 979 box 128 folder 12
arrangement =
degree =
contributing =
names =
topics =
geoPlaceNames =
genre =
occupations =
functions =
subject =
langIN =
audience =
condition =
generalNotes =
collection =
linkToFindingAid =
source =
SIRSI =
callNumber =

В этом примере поля типа altTitle и description должны быть пустыми и пропущены. Любая помощь приветствуется.

3

Решение

Вы решили проблему с пробелами в полях элегантным способом. К несчастью, operator>> будет пропускать последовательные вкладки, как если бы они были одним разделителем. Итак, до свидания пустые поля?

Один из простых способов сделать это — использовать getline() читать отдельные строковые поля:

getline (ss, coTitle, '\t');
getline (ss, altTitle, '\t');
getline (ss, description, '\t');
...

Другой способ

1

Другие решения


По вопросам рекламы [email protected]