Logo Hardware.com.br
kao00
kao00 Zerinho Registrado
352 Mensagens 1 Curtida
#5 Por kao00
29/03/2004 - 19:09

// Isso aqui é as coisaradas do C++ para fazer input/output, manipular strings,
// abrir arquivos, usar algoritimos da biblioteca padrão, etc
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::ios;

#include <string>
using std::string;
using std::getline;

#include <fstream>
using std::ifstream;

#include <sstream>
using std::istringstream;

#include <vector>
using std::vector;

#include <algorithm>
using std::sort;
using std::copy;

#include <cctype>
#include <iterator>

int main()
{
// Essa variável vai guardar cada linha que for lida do arquivo de texto
string line;

// Essa variável vai guardar cada palavra da linha para depois "guardar"
// ela na "caixa"
string word;

// Isso aqui é tipo "uma caixa" onde eu vou "guardar" todas as palavras do texto
vector<string> allWords;

// Aqui é onde eu abro o arquivo texto em modo leitura. Eu podia ter feito um
// negócio mais bem feito onde o usuário especificaria qual texto ele quer abrir,
// mas como a preguiça é muita, o tempo é pouco e isso aqui é só para te mostrar
// a idéia da coisa, vai asssim mesmo
ifstream input("epiphany.txt", ios::in);

// Aqui eu testo para ver se o arquivo que eu estou tentando abrir na linha acima
// existe mesmo e pode ser lido. É sempre bom você ver essas coisas antes de começar
// a manipular um arquivo
if(!input){
cout << "Error opening file..." << endl;
cin.get();
exit(1);
}

else{

// Enquanto não for o final do arquivo...
while(!input.eof()){

// Pegar uma linha do arquivo e guardar ela na variável line
getline(input, line);

// Aqui eu tipo coloco a linha que eu acabei de pegar no arquivo na
// memória do computador
istringstream inputString(line);

// Enquanto tiver coisas na variável inputString (que, na verdade, está
// na memória do computador), guarde uma palavra na variável word, converta
// o primeiro character da variável word para letra minúscula, guarde a variável
// word na "caixa" allWords e vá para a próxima palavra
while(!inputString.eof()){
inputString >> word;
word[0] = tolower(word[0]);
allWords.push_back(word);
}
}

// Nunca se esqueça de fechar o arquivo que você estava usando depois de terminar
// o que você tinha que fazer com ele
input.close();
}

// Aqui eu usei uma função da biblioteca padrão para organizar as palavras que estão na
// "caixa" em ordem alfabética
sort(allWords.begin(), allWords.end());

// E finalmente, aqui eu mostro todas as palavras que estão na caixa depois que elas foram
// organizadas em ordem alfabética. Isso aqui eu peguei do meu livro e eu ainda não entendi
// muito bem porque que eu tenho que usar esse tal de iterator, mas eu chego lá rs
for(vector<string>::iterator i = allWords.begin(); i != allWords.end(); i++)
cout << *i << endl;

cout << endl;

return 0;
}


O texto que eu usei de teste foi a música do Staind que chama Epiphany. O Texto estava desse jeito:

Your words to me just a whisper
Your face is so unclear
I try to pay attention
Your words just disappear
Cause it is always raining in my head
Forget all the things I should have said
So I speak to you in riddles
Cause my words get in my way
I smoke the whole thing to my head
And feel it wash away
Cause I cannot take anymore of this
I want to come apart
or dig myself a little hole
Inside your precious heart
Cause it is always raining in my head
Forget all the things I should have said
I am nothing more than
A little boy inside
That cries out for attention
But I always try to hide
Cause I talk to you like children
Though I do not know how I feel
But I know I will do the right thing
If the right thing is revealed
Cause it is always raining in my head
Forget all the things I should have said


Quando eu rodo o programa, isso que ele mostra:

a
a
a
all
all
all
always
always
always
always
am
and
anymore
apart
attention
attention
away
boy
but
but
cannot
cause
cause
cause
cause
cause
cause
children
come
cries
dig
disappear
do
do
face
feel
feel
for
forget
forget
forget
get
have
have
have
head
head
head
head
heart
hide
hole
how
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
if
in
in
in
in
in
inside
inside
is
is
is
is
is
it
it
it
it
just
just
know
know
like
little
little
me
more
my
my
my
my
my
my
myself
not
nothing
of
or
out
pay
precious
raining
raining
raining
revealed
riddles
right
right
said
said
said
should
should
should
smoke
so
so
speak
take
talk
than
that
the
the
the
the
the
the
thing
thing
thing
things
things
things
this
though
to
to
to
to
to
to
to
try
try
unclear
want
wash
way
whisper
whole
will
words
words
words
you
you
your
your
your
your


O problema com isso tudo é que pra vc mecher com palavras em português, por exemplo, vc teria muita mão de obra pois letras como á,é, etc não são suportadas pelo console sem vc usar umas coisinhas especiais, e mesmo vc usando essas coisinhas especiais, acho que não dá pra mostrar a letra corretamente em uma janela de DOS. Repare tb que o texto que eu usei está limpinho: não tem ponto, vírgula, nada. Nem mesmo as palavras em inglês como it's, I'll, etc. Acho que se tiver coisas desse tipo no texto, o programa não vai funcionar direito. Eu nem quis testar pq eu tenho 99.9% de certeza que ele não vai funcionar direito. Espero que isso te ajude.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal