Задачку предложил NaikoN. Суть задачи вот в чем: есть файл в котором записан некоторый текст на английском языке. Требуется вывести в алфавитном порядке все буквы которые встречаются в файле. Каждую букву выводить только один раз.
То есть, входными данными для программы может быть путь к файлу, конечно же можно прописать путь к файлу жестко, в коде, но это будет не красиво. Программа должна открывать файл в режиме чтения, и по порядку считывать каждый символ и сразу сравнивать, встречалась ли ранее такая буква, если — да, то не выводить текущую букву. Буквы, которые необходимо вывести на экран можно временно сохранять в строку.
Решение предоставил — NaikoN, вот его исходный код:
#include <iostream> #include <vector> #include <fstream> #include <conio.h> using namespace std; int main() { char buf[256]; cout<<"Enter file path: "; cin>>buf; ifstream in(buf); if(!in)/// Если файл не найден { cout<<"file not found "; return 0; } string str; vector<char> vec_char, vec_final; while(getline(in,str))///Пока есть строки в файле { for(unsigned int i=0;i<str.length();++i) { if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')///если буква { ///записывае в векторб но только маленькими буквами vec_char.push_back(tolower(str[i])); } } } for(char j='a';j<='z';++j)///поиск букв в алфавитном порядке { for(int i=vec_char.size()-1;i>=0;--i) { if(vec_char[i]==(j)) { vec_final.push_back(vec_char[i]);///если буква найденна break; } } } for(auto &x:vec_final)cout<<x<<ends;///вывод на экран return 0; }
Содержимое файла: To be or not to be!!!
Смотрим на результат работы программы:
Enter file path: file.txt benort
Комментарии
YourSpace_tym
Shini_chi
vitaly prishepa
#include <bits/stdc++.h>
using namespace std;
int main()
{
setlocale(LC_ALL, «RUSSIAN»);
ifstream in;
ofstream out;
cout << «Введите имя файла: «;
char name[100];
cin >> name;
in.open(name);
out.open(«latin_out.txt»);
if (!in.is_open())
{
cerr << «Файл не может быть открыт! \n»;
out << «Файл не может быть открыт! \n»;
return 1;
}
int a[300]{};
string s;
while (in >> s)
{
for (int i = 0; i < s.size(); ++i)
a[s[i]]++;
}
for (int i = 0; i < 150; ++i)
if (a[i] && ((i >= ‘a’ && i <= ‘z’) || (i >= ‘A’ && i <= ‘Z’)))
cout << (char)i;
}
DenzelWashington