Ir ao conteúdo

Posts recomendados

Postado

Acontece que, sou novo em C++ e baixei um PDF com exercícios pra treinar... o Exercícios diz "Faça um programa que lê uma String e diz quantas letras minusculas ela tem, quantos números e quantos caracteres de pontuação"

-Fiz a seguinte função:

void pontInfo(char Str[], int nCount)
{
    cout << "Pontuação: ";

    char cAux[nCount];
    char nArrayPont[] = {'?', '.', '!', ':', ',', ';', '-'};
    int nSize = strlen(nArrayPont);

    for(int n = 0; n < nCount; n++)
    {
        for(int j = 0; j < nSize; j++)
        {
            if(Str[n] == nArrayPont[j])
            {
                cAux[n] = nArrayPont[j];
            }
        }
    }

    int nAuxLen = strlen(cAux);
    char nPont[nAuxLen];

    if(nAuxLen == 0)
    {
        cout << "Nenhuma" << endl;
    }

    for(int i = 0; i < nAuxLen; i++)
    {
        nPont[i] = cAux[i];
    }

    for(int i = 0; i < nAuxLen; i++)
    {
        if(i < nAuxLen - 1)
        {
            cout << nPont[i] << ", ";
        }
        else
        {
            cout << nPont[i] << endl;
        }
    }
}

Sempre acontece dá erro.. Alguém pode me explicar onde eu erro?

Postado
46 minutos atrás, André Luiz Feijó disse:

Acontece que, sou novo em C++ e baixei um PDF com exercícios pra treinar... o Exercícios diz "Faça um programa que lê uma String e diz quantas letras minusculas ela tem, quantos números e quantos caracteres de pontuação"

-Fiz a seguinte função:

void pontInfo (char Str[], int nCount) {

    cout << "Pontuação: ";

    char cAux[nCount];
    char nArrayPont[] = {'?', '.', '!', ':', ',', ';', '-'};
    int nSize = strlen (nArrayPont); // #Aqui tem um erro.



  ...

A função strlen () exige, em seu parâmetro, uma argumento string.

A única coisa que distingue um vetor de caracteres (char) de uma string (char) é o ultimo elemento, porque uma vetor string tem o caractere '\0' no fim da lista. Todas as funções que manipulam strings [strlen...strcmp] só terminam suas tarefas quando esse caractere for encontrado. Daí a array nArrayPont só precisa dele no fim da lista para strlen retorna a largura certa.

 

Assim:

void pontInfo (char Str[], int nCount) {

    cout << "Pontuação: ";

    char cAux[nCount];
    char nArrayPont[] = {'?', '.', '!', ':', ',', ';', '-', '\0'};
    int nSize = strlen (nArrayPont); // Correto retorno para nSize.



  ...

:thumbsup: Resolve aí

  • Curtir 2
Postado
2 horas atrás, Mauro Britivaldo disse:

void pontInfo (char Str[], int nCount) {

    cout << "Pontuação: ";

    char cAux[nCount];
    char nArrayPont[] = {'?', '.', '!', ':', ',', ';', '-'};
    int nSize = strlen (nArrayPont); // #Aqui tem um erro.



  ...

A função strlen () exige, em seu parâmetro, uma argumento string.

A única coisa que distingue um vetor de caracteres (char) de uma string (char) é o ultimo elemento, porque uma vetor string tem o caractere '\0' no fim da lista. Todas as funções que manipulam strings [strlen...strcmp] só terminam suas tarefas quando esse caractere for encontrado. Daí a array nArrayPont só precisa dele no fim da lista para strlen retorna a largura certa.

 

Assim:


void pontInfo (char Str[], int nCount) {

    cout << "Pontuação: ";

    char cAux[nCount];
    char nArrayPont[] = {'?', '.', '!', ':', ',', ';', '-', '\0'};
    int nSize = strlen (nArrayPont); // Correto retorno para nSize.



  ...

:thumbsup: Resolve aí

Obrigado!

Acontece que erros ainda estão sendo retornados...

Ex.: Se eu boto "-", ele me retorna "?, o, G"

  • Curtir 1
Postado
1 hora atrás, André Luiz Feijó disse:

Acontece que erros ainda estão sendo retornados...

Ex.: Se eu boto "-", ele me retorna "?, o, G"

é pelo mesmo motivo!

4 horas atrás, André Luiz Feijó disse:

    int nAuxLen = strlen(cAux);

    char nPont[nAuxLen];

Mais uma vez você usou strlen em um array cujo o ultimo elemento não é '\0', 

Desta maneira a função retorna a largura errada.

 

Por exemplo Isso é o interior de um vetor: ['-','M','A','U']. Se argumentar para strlen a função retorna um valor desconhecido no instante que ela encontrar '\0' perdido na memória. Agora isto é uma string literal: {"-MAU"} ou na sua forma analítica assim ['-','M','A','U','\0'], as duas são a mesma coisa, se nós as chamarmos em strlen o resultado é:  4.

 

:thumbsup: Uma dica é, teste todas as funções antes de usar, ou leia a documentação para entender mais profundamente sua utilidade, pontos fracos e fortes.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!