question

Como escrever um programa em C++ para contar a frequencia de todas as letras em um arquivo de texto desejado?

Minha missão é escrever um programa em C++ para contar a frequência de todas as letras em um arquivo de texto e exibir os resultados mais tarde. Eu sou muito novo para C++, eu sei C básico muito bom, mas este novo professor para C++ não é tão bom de um professor até agora. Ele disse que ele iria ensiná-la como uma classe onde ninguém viria a saber de qualquer conhecimento prévio do C++, C apenas básica, mas depois quando ele dá a lição de casa e um começo para ele usa um monte de coisas no programa que nunca vi antes. Por exemplo, ifstream e instream. Eu nunca vi fluxos antes e realmente não sei como usá-los.

Aqui está o que até agora tem programa sábio:

# incluem<string>
usando o namespace std;
int main () {
lineBuffer de seqüência de caracteres;
String FileName;
cout<"\nEnter name="" of="" file="" to="" process:="" ";=""></"\nEnter>
getline(CIN,filename);
ifstream inMyStream; //Open meu fluxo de arquivo
se (inMyStream.is_open()) {

//Create uma matriz para armazenar a letra conta
int upperCaseCount [26] = {0};
int lowerCaseCount [26] = {0};

//Read o arquivo de texto
enquanto (! inMyStream.eof()) {
//Get uma linha de texto
getline (inMyStream, lineBuffer);
//Read através de cada letra a lineBuffer
Char oneLetter;
para (int n = 0; n< linebuffer.length();="" ++n="" )="">
{
oneLetter = char (lineBuffer [n]); //Get uma carta
se (oneLetter > = 'A' && oneLetter<='Z') {="" decide="" if="" it="" is="" a="" capital="" letter=""></='Z')>
upperCaseCount[int(oneLetter)-65] + +; //Make a partida de índice da matriz de contagem
se (oneLetter > = 'a' && oneLetter<='z') {="" decide="" if="" it="" is="" a="" lower="" case="" letter=""></='z')>
lowerCaseCount[int(oneLetter)-97] + +; //Make a partida de índice da matriz de contagem
}
}
}
inMyStream.close(); //Close o fluxo de arquivos

//display as contagens
para (int i = 0; i< 26;="" i++)="">
cout< char(i="" +="" 65)="">< "\t\t"="">< uppercasecount[i]="">< endl;="">
cout< char(i="" +="" 97)="">< "\t\t"="">< lowercasecount[i]="">< endl;="">

}
else cout< "file="" error:="" open="" failed";="">
retorno 0;
}


Quando eu compilo o programa eu recebo os seguintes erros:

homework1.c: na função 'int main ()':
homework1.c:36: erro: esperado primária-expressão antes 'else'
homework1.c:36: erro: esperado '; 'else'
homework1.c:38: erro: esperado '}' no final da entrada



Qualquer ajuda seria apreciada!</string>
resposta Resposta
A leitura de linha sábio apenas adiciona também muito de uma sobrecarga para o propósito do seu programa. Assim como a outra resposta que mencionou, leitura personagem sábia provavelmente é o caminho certo a seguir. # incluem <string># incluem <fstream># incluem <iostream>usando o namespace std; int main () {string lineBuffer; String FileName; cout <"\nEnter name="" of="" file="" to="" process:="" ";="" getline(cin,filename);="" ifstream="" inmystream(filename.c_str());="" open="" my="" file="" stream="" if="" (inmystream.is_open())="" {="" create="" an="" array="" to="" hold="" the="" letter="" counts="" int="" uppercasecount[26]="{0};" int="" lowercasecount[26]="{0};" read="" the="" text="" file="" char="" oneletter;="" while="" (inmystream="">> oneLetter) {/ / ler cada letra a lineBuffer se (oneLetter > = 'A' && oneLetter <='Z') decide="" if="" it="" is="" a="" capital="" letter="" uppercasecount[oneletter="" -="" 'a']++;="" make="" the="" index="" match="" the="" count="" array="" else="" if="" (oneletter="">= 'a' && oneLetter <='z') decide="" if="" it="" is="" a="" lower="" case="" letter="" lowercasecount[oneletter="" -="" 'a']++;="" make="" the="" index="" match="" the="" count="" array="" }="" display="" the="" counts="" for="" (int="" i="0;" i=""></='z')> < 26;="" i++){="" cout=""> < char(i="" +="" 65)=""> < "\t\t"=""> < uppercasecount[i]=""> < endl;=""> < char(i="" +="" 97)=""> < "\t\t"=""> < lowercasecount[i]=""> < endl;="" }="" inmystream.close();="" close="" the="" file="" stream="" }="" else="" cout="">< "File Error: Open Failed"; return 0; } "file="" error:="" open="" failed";="" return="" 0;=""></ "File Error: Open Failed"; return 0; }></> </='Z')> </"\nEnter> </iostream> </fstream> </string>


Comentários Comentários

Guest
Renan Núnez na 18 Jun 2013
0
Bem, primeiro, aqui é a lógica básica em Perl: gato YourInputFile | Perl - ane ' grep {$X {$_} + +;} dividir / /; FIM {grep {print "$_ $X {$_} \n"} tipo chaves %X;} ' Isso funciona, a propósito. A idéia é coletar os dados de entrada de um arquivo de texto e um loop em cada linha. Então, para cada linha, um loop em cada caractere individual dessa linha. Assim, você verá todos os caracteres do arquivo inteiro do começo ao fim. Para cada caractere que você vê, incrementar um contador. O contador é uma matriz de 256 contadores (ASCII somente, eu assumo aqui), então você realmente ter um contador para cada um dos possíveis caracteres você pode ver. Iniciá-los todos em zero, claro. Quando chegar ao final do arquivo de entrada, você terá tido o número de cada um dos personagens que estavam lá. Então, no final ("{final}" no meu código Perl), vocês só dão-nos 256 contadores e seus valores. Para extra legal, você pode pular os contadores que ainda eram zero. ... Outra maneira de ir, é tratar o arquivo inteiro como apenas um caractere após o outro (ignorando o line-wise). Use "getch ()" para isso. Apenas ler um char em um tempo, contá-lo, seguir em frente. Certifique-se em C++ para zero matriz de contadores primeiro. (Eu não precisava fazer isso em Perl). Em C, um simples ? char * contagem = (char *) calloc (256, sizeof (char)); vai fazê-lo. ... A propósito, seu loop para (int eu = 0; eu < 26; i + +) está faltando o "{" no final.

O seu comentário
Acho que a resposta não está correta ou que você gostaria de acrescentar mais
alguma informação? Envie o seu comentário abaixo..

Guest


HTML não é permitido!

Image Code

Digite os caracteres que aparecem na imagem por isso sabemos que você é humano!

Receber um email quando alguém acrescenta outro comentário a esta pergunta


Topo da página


Home  Terms
Copyright © Accelerated Ideas 2005-2024
All rights reserved