@EboLiK

Как считать предложение из файла и вывести его в несколько строк?

Есть в файл, в котором записан состав блюда в одну строку (надо было записать это именно в одну строку). Так вот, надо, чтобы при считывании, это все выводилось в несколько строк. Это можно сделать добавлением в файл каких-нибудь \n или что-то подобное?
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 3
@WAR_VIK
Считанную из файла строку можно разбить по пробелам вот так:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>

int main() {
std::string str{"This string in file"};
std::stringstream s(str);
std::vector<std::string> vec;
std::string word{""};
while(s >> word) vec.push_back(word);
for(auto &i : vec) std::cout << i << '\n';
return 0;
}

Или с помощью регулярного выражения:
#include <iostream>
#include <regex>
#include <string>
#include <vector>

int main() {
std::string str{"Hello! This string of your file"};
std::regex reg{"\\S+"};
std::vector<std::string> vec;
std::smatch sm;
while(std::regex_search(str, sm, reg)) {
      vec.push_back(sm.str());
      str = sm.suffix();
}
for(auto &i : vec) std::cout << i <<' \n';
return 0;
}

Или реализовать указанный в первом ответе алгоритм:
#include <iostream>
#include <string>
#include <vector>

void split(std::string& str, std::vector<std::string>& vec) {
       std::string tmp{""}, delimiter{".!?"};
       int pos{0};
       for(int i{0}; i < str.length(); ++i) {
               tmp += str[i];
               pos = delimiter.find(str[i]);
               if(pos > -1) {
                        vec.push_back(tmp); 
                        tmp = "";
                        while(str[i+1] == ' ') ++i;
               }
       }
}

int main() {
        std::string s{"Hi bro! How are you?     This your string of file."};
        std::vector<std::string> res;
        split(s, res);
        for(auto& el : res) std::cout << el << '\n';
        return 0;
}
Ответ написан
@Mrhard3003
Недопрогер
По заданию, у нас есть состав блюда в одну строку.
1. Считываем строку. Например, через getline.
2. Идём по строке, проверяем текущий символ, пробел ли он(если разделителем является пробел, иначе проверяем на разделитель)
* Если он не разделитель, то добавляем этот символ в строку-буфер. Переходим на следующий символ
* Иначе:
-1. Строку-буфер добавляем в структуру (vector, например)
-2. После чего, этот буфер чистим.
-3. Переходим на след символ
Идём к п.2, пока не закончится строка (что бы последнее слово добавилось, можно в конец строки добавить пробел (др. разделитель))
а дальше просто выводим всё содержимое вектора в консоль/файл, куда необходимо
Ответ написан
@Urilobus
Попробуйте этот вариант, в данном случае слова в строке должны быть разделены пробелами или табуляцией.

#include <iostream>
#include <string>
#include <fstream>

int main(){

    std::fstream file_In;
    file_In.open("File_In.txt");
    std::string Resept;
   do{
        file_In >> Resept; // Считывание строки по словам до пробела 
        std::cout << Resept << std::endl; //Вывод считанного слова в консоль
    } while(!file_In.eof()); // !file.eof() - проверяет не закончился ли файл
    system("pause");
return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы