Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
André Luiz Feijó

C++ C++ - erro exercício String

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites
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í

Editado por Mauro Britivaldo
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

Editado por Mauro Britivaldo
Formatação
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×