C/C++

Написать программу на C++ (Тема файлы)

Пусть дан текстовый файл. Распечатайте все строки, оканчивающиеся
заданным словом.

Файл может быть любым, слово тоже.
Rufis Aqayev
Rufis Aqayev
222
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <vector>
#include <regex>
using namespace std;
int main() {
system("chcp 1251 > nul");
cout << "Введите слово: ";
string word;
cin >> word;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Путь к файлу: ";
string path;
getline(cin, path);
ifstream inp(path);
if (!inp.is_open()) puts("Путь к файлу не найден!");
else {
string line;
while (getline(inp, line)) {
string tmp = line;
auto pos = tmp.find(word);
if (pos != string::npos) {
istringstream iss(tmp);
vector<string> box;
string token;
while (iss >> token) box.push_back(token);
auto last = regex_replace(box.back(), regex("[.?!)(,:\"\']"), "");
if (last == word) cout << line << '\n';
}
}
inp.close();
}
}
Бауыржан .
Бауыржан .
52 356
Лучший ответ
#include <iostream>
#include <string>
#include <fstream>
#include <cstring>

using namespace std;

#define LIMIT1 1024
#define LIMIT2 4096

bool not_bukva(const char c)
{
return c == ' ' || c == '\t' || c == '.' || c == ',' || c == ';' || c == '!' || c == '\?' || c == ':' || c == '(' || c == ')' || c == '\n' || c == '\r';
}

int main()
{
bool yes;
string word;
char filename[LIMIT1 + 1];
char str[LIMIT1 + 1];
cout << "The word: ";
cin >> word;
cout << "The name of the file: ";
cin >> filename;
int i = 0,lenstr,j;
FILE * ifs;
ifs = fopen(filename, "r");
if(ifs != nullptr)
{
while(fgets(str,LIMIT1,ifs) && i < LIMIT2)
{
yes = true;
lenstr = strlen(str);
j = lenstr - 1;
while(j >= 0)
{
while(not_bukva(str[j])) j--;
for(int x = word.length() - 1; x >= 0; x--)
if(str[j--] != word[x])
{
yes = false;
break;
}
if(yes)
{
if(not_bukva(str[j]) || j < 0)
cout << str;
}
}
i++;
}
fclose(ifs);
}
return 0;
}
Богдан Уткин
Богдан Уткин
74 938
ТЗ у вас неточное.
Требуется расшифровка понятия "все строки, оканчивающиеся
заданным словом". Это предложение можно понимать по разному и код, соответственно, будет очень разным.
Например, у нас есть строка "В далеке пыхтел старый паровоз". Если заданно слово "воз", то в одной трактовке ТЗ строка будет оканчиваться на это слово а в другой не будет. Требуется ли выделять слово и если да, то какие пустые символы и какие символы-разделители допустимы во входном потоке? Если строка оканчивается пустыми символами, перед которым следует заданное слово, то, опять же, при одной трактовке ТЗ строка будет оканчиваться на слово а при другой не будет.