Ir ao conteúdo
  • Cadastre-se
Mauro Del Gaudio

problema com string e funçao

Recommended Posts

boa tarde!

estou com problema neste exercicio

 

 

faça um procedimento ou funçao que duplique as palavras de um texto fornecido como parametro de entrada.

ou seja se for digitado "bom dia" ira imprimir "bom bom dia dia".

 

fiz esse codigo:

 

 

#include<iostream>
#include<string>
using namespace std;
void texto(string palavra);
void duplica(string palavra);
int main()
{
    string palavra;
    texto(palavra);
    duplica(palavra);
    return 0;
}
void texto(string palavra)
{
    int i;
    for(i=0;palavra!='\0';i++)
    {
        getline(cin,palavra);
    }
}
void duplica(string palavra)
{
    int i;
    for(i=0;palavra!='\0';i++)
    {
        if(palavra!=" ")
            cout<<palavra<<" "<<palavra<<" ";
    }
}
  

 

porém esta dando erro

 

ex1.cpp: in function 'voide duplica(std::string)':

ex1.cpp:26:18: warning: comparison with string literal results in unspecified behaviour [-Waddress]

ex1.cpp:26:18: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK!

A primeira palavra termina quando o primeiro espaço surgi! 
Beleza, contudo 

palavra[] // é um string quando termina com \0;

palavra //  é um elemento de um vetor de inteiros;

 

Em C, é assim que funciona, e eu resolveria assim:

/*Eu amo programas em C*/    char love[] = "Eu amo programar em C";    char ch;    int i = 0;    while( (ch = love[i++]) != ' ')        putchar(ch);    printf(" %s\n", love);

if(palavra!=" ")

" " aspas duplas = string = '\40 ' e '\0', 

' ' aspas simples = literal char = ' \40';

Compartilhar este post


Link para o post
Compartilhar em outros sites

noo eu nao sei muito programa em c nao, comecei o curso agora hehehe

ele ta passando c++, eu n consegui entende esse codigo que você passou (desculpe minha burrice hahaha)

 

quando eu coloquei la

 

palavra eu estava comprando o caracter q esta na posiçao i, nao?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não! Você na verdade comparou um caractere com um ponteiro para string literal.

Para fins de entediamento a comparação seria equivalente assim:

 

Agora sim você como abaixo estaria comparando caracteres correspondentes; com espaço ('\40' ou ' ');

if(palavra[i] != *" ")

Observe que coloquei um * para referencia apenas o primeiro elemento do string que naturalmente é espaço.

Veja também.

char * ptr = "Oi! eu sou um string literal, e C me enxerga como um ponteiro constante";ptr \\aponta para O na memoria;

:) Resumindo o problema é que em vez de aspas duplas deveria ser aspas simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que ainda estais usando aspas duplas, troque por aspas simples

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar a função substr para retornar uma parte do texto
 

    string palavra = "bom dia";    int i, aux, tam = palavra.length();        for(i = aux = 0; i < tam; i++){        if(palavra[i - 1] == ' ') aux = i;                if(palavra[i] == ' ' || i + 1 == tam){            if(i + 1 == tam) i++;            for(int x = 0; x < 2; x++)                cout << palavra.substr(aux, i - aux) << endl;                   }    }

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

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 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

×