Skip to content

Instantly share code, notes, and snippets.

@felladrin
Created February 10, 2012 21:16
Show Gist options
  • Save felladrin/1792947 to your computer and use it in GitHub Desktop.
Save felladrin/1792947 to your computer and use it in GitHub Desktop.
Contagem de letras e inversão de palavras de um texto
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
unsigned int contaLetra(const string &txt, const char &letra)
{
unsigned int qtd = 0;
string::size_type pos = txt.find(letra);
while(pos != string::npos)
{
qtd++;
pos = txt.find(letra, pos+1);
}
return qtd;
}
unsigned int contaSequencia(const string &txt, const string &seq)
{
unsigned int qtd = 0;
string::size_type pos = txt.find(seq);
while(pos != string::npos)
{
qtd++;
pos = txt.find(seq, pos+1);
}
return qtd;
}
int main ()
{
string linha;
string biblia;
ifstream txt("biblia.txt");
if (txt.is_open())
{
while (txt.good())
{
getline(txt, linha);
biblia.append(linha);
biblia.append("\n");
}
txt.close();
}
else
{
cout << "Não foi possível abrir o arquivo biblia.txt. Verifique se ele está na mesma pasta deste programa.";
exit(1);
}
stringstream bibliaCopia(biblia);
transform(biblia.begin(), biblia.end(), biblia.begin(), ::tolower);
// Quantas ocorrências de cada letra existem no arquivo?
cout << "Quantas ocorrências de cada letra existem no arquivo?\n\n";
string letra = "abcdefghijklmnopqrstuvwxyz";
for (unsigned int i = 0; i < letra.size(); i++)
cout << letra[i] << " = " << contaLetra(biblia, letra[i]) << endl;
// Quantas vezes a sequência "eus" aparece no arquivo?
cout << "\nQuantas vezes a sequência \"eus\" aparece no arquivo?\n\n";
cout << contaSequencia(biblia, "eus") << " vezes.";
// Quantas palavras terminam com as letras "s"?
cout << "\n\nQuantas palavras terminam com a letra \"s\"?\n\n";
unsigned int quantoS = 0;
vector<string> s;
s.push_back("s ");
s.push_back("s,");
s.push_back("s.");
s.push_back("s:");
s.push_back("s!");
s.push_back("s?");
for (vector<string>::iterator it = s.begin(); it < s.end(); it++)
quantoS += contaSequencia(biblia, *it);
cout << quantoS << " palavras.\n\n";
// Escreva toda a biblia.txt em um arquivo ailbib.txt, com todas as palavras invertidas.
string palavra;
ofstream saida;
saida.open("ailbib.txt");
while (bibliaCopia >> palavra)
{
reverse(palavra.begin(), palavra.end());
saida << palavra << " ";
}
saida.close();
cout << "Arquivo ailbib.txt, com todas as palavras invertidas, foi criado com sucesso.";
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment