Ir ao conteúdo
  • Cadastre-se

problema com string e funçao


Mauro Del Gaudio

Posts recomendados

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]

Link para o comentário
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';

Link para o comentário
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.

Link para o comentário
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;                   }    }
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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