Dúvidas de String

41 views
Skip to first unread message

macp...@gmail.com

unread,
Aug 31, 2020, 4:21:49 AM8/31/20
to ccppbrasil
Time, bom dia !!

Eu aqui mais uma vez....
Em relação ao enunciado será que fiz correto ??
Esqueci algo ?
Tem outra forma ?

Elabore um programa na linguagem C++ que leia uma string e imprima os o carácteres que se encontra no meio dela :

Palavra OVO = V
Palavra AMARELO =  AR

Pq será q não imprimi o AR do amarelo ??.... Onde errei ?

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

    setlocale (LC_ALL, "portuguese"); ( Qual a outra saída para os casos de acentuação?)

    string str;

    cout<<" Digite uma palavra : ";

    cin>>str;

    char chr[str.size()];

    str.copy(chr,1,str.size() / 2 );

    chr[1]='\0';

    cout<<"\n\n"<<" O caracter do meio é : "

        <<chr<<"\n\n"<<endl;

    return 0;

}


Obrigado mais uma vez !!!






Abraço a todos !!!

Virgilio Fornazin

unread,
Aug 31, 2020, 9:25:40 AM8/31/20
to ccppb...@googlegroups.com
Tá confuso desde a dúvida... rs

--
http://ccppbrasil.github.io/
https://twitter.com/ccppbrasil
 
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/ccppbrasil/0d52b663-82b2-4bd3-807e-ff9a01804c84n%40googlegroups.com.

Fabio A Mazzarino

unread,
Aug 31, 2020, 9:41:45 AM8/31/20
to ccppb...@googlegroups.com
Bom dia, Rapaz.

Tem um erro no enunciado. AMARELO, tal qual OVO, tem um número ímpar de caracteres, e portanto o caractere do meio vai ser um só: R. Mas se a gente fizer um teste com a palavra CASA seu programa exibe S e não AS.

Seu erro principal está na utilização do método std::string::copy, vamos dar uma olhada na declaração do método:

size_t copy (char* s, size_t len, size_t pos = 0) const;

O primeiro parâmetro é um buffer de destino. Ok, nesse vc acertou.

O segundo parâmetro é o tamanho da string que vc quer copiar. Aqui começa o erro: vc pediu pra copiar um único caractere, isso não vai dar certo qdo o tamanho da string for par, vc tem que colocar um qdo for ímpar, e dois qdo for par. Tente usar o operador de resto da divisão inteira %.

O terceiro parâmetro é a posição inicial do trecho q vc quer copiar. Aí tem outro erro, vc só dividiu por dois, qdo é ímpar dá td certo pq a divisão inteira é truncada, assim 1,5 vira 1, e 3,5 vira 3, e o índice do início da string que vc quer fica certo. Mas qdo é par 4 vira 2, que não é o índice que vc quer. Tente novamente determinar qdo o tamanho é par e qdo é ímpar.

Na verdade vc tem que fazer um if pra definir qdo usar qual método, se o tamanho é par tem que fazer de um jeito, se o tamanho é ímpar vc tem que fazer de outro.


Acho que com essas dicas vc consegue resolver.


Fabio A. Mazzarino
--
Lab C++ - Código, Dicas e Snippets


--
http://ccppbrasil.github.io/
https://twitter.com/ccppbrasil
 
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/ccppbrasil/0d52b663-82b2-4bd3-807e-ff9a01804c84n%40googlegroups.com.


--

Marcos Pedral

unread,
Sep 1, 2020, 6:16:33 AM9/1/20
to ccppb...@googlegroups.com
Fábio e Virgilio, bom dia !!
Muito obrigado pelo retorno.. 
Verificando sua explicação é dessa forma ?
Pois o "AMARELO", continua imprimindo o "R" e não o "AR"..
Onde estou errando

STRING AMARELO - O PROGRAMA DEVE IMPRIMIR AS LETRAS "AR"




#include <iostream>
#include <cstring>
using namespace std;
int main(){


string saida = "";string str = "amarelo";

    cout<<" Digite uma palavra : ";
    cin>>str;

    int inicio = 0;
    int total = 0;
    if (str.size() == 0) return 0;
    if (str.size() % 2 == 1)
    {   inicio = str.length() / 2;
        total = 1;
    }
    else
    {   inicio = str.length() / 2 - 1;
        total = 2;
    };
    cout << "String: '" << str
        << "'\tTamanho: " << str.length()
        << "\tMeio: '" << str.substr(inicio, total)
        << "'\n";
    return 0;
}


Renan Prata

unread,
Sep 1, 2020, 9:40:25 AM9/1/20
to ccppb...@googlegroups.com

Marcos,
A palavra AMARELO tem 7 caracteres. O ponto central seria apenas o caractere 'R' (index 3). Não tem lógica alguma em O-V-O imprimir apenas o 'V' e em AMARELO imprimir 'AR'.

Alguns pontos:
1) O problema deveria estar mais bem explicado. Isso é um exercício de algum curso? Envia o enunciado completo sempre que tiver dúvida.
2) Seu problema é com lógica de programação e não com C++.

[]s,


macpedral

unread,
Sep 1, 2020, 10:02:06 AM9/1/20
to ccppb...@googlegroups.com
Olá Renan, bom dia !!
Sou iniciante no curso de Eng Software via EAD e nesse momento me deparei com essa avaliação.
Não sei onde estou errando 


Elabore um programa na linguagem C++ que leia uma string e imprima os o carácteres que se encontra no meio dela
Ex:para a string ovo → o programa deve imprimir a letra v
Ex: para a string andré → o programa deve imprimir a letra d
Ex: para a string jose → o programa deve imprimir as letras os
Ex: para a string amarelo → o programa deve imprimir as letras ar 

Muito Obrigado pelo retorno


Enviado do meu smartphone Samsung Galaxy.


-------- Mensagem original --------
De : Renan Prata <renan...@gmail.com>
Data: 01/09/2020 10:40 (GMT-03:00)
Assunto: Re: [ccppbrasil] Dúvidas de String

de...@roo.com.br

unread,
Sep 2, 2020, 2:03:37 AM9/2/20
to ccppbrasil
//
// g++ teste.c && ./a
//

#include <iostream>
#include <cstring>
#include <assert.h>

using namespace std;

int main(void) {
    string str;
    string res;
    int len;

    try {
        cout<<" Digite uma palavra : ";
        cin >> input;

        len = str.length();
        if (len == 0) {
            cout << "a string nao pode ser zero" << endl;
            exit( EXIT_FAILURE );
        }

        if (len < 2) {
            cout << "a string precisa ser mais que 2" << endl;
            exit( EXIT_FAILURE );
        }
        
    res = ((len % 2) == 0) ? str.substr(len/2 - 1, 2) : str.substr(len/2, 1);

        cout << "palavra : " << str << endl;
        cout << "tamanho : " << len << endl;
        cout << "meio    : " << res << endl;
    } catch (int e) {
        cout << "Exception #" << e << '\n';
    }

    return 0;

DQ

unread,
Sep 2, 2020, 9:25:57 AM9/2/20
to ccppbrasil
Marcos,

Como o Renan disse, o enunciado está inconsistente. Mostrando visualmente o que seria o "meio" da string:

o v o
an d ré
 j os e
ama r elo

O "meio" de amarelo é r não ar. Envie um questionamento para os responsáveis pelo curso.

Daniel
Reply all
Reply to author
Forward
0 new messages