1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Armazenar Apelido

Discussão em 'Programação' iniciada por J.Joao, 26 de Abril de 2012. (Respostas: 4; Visualizações: 1049)

  1. Boas pessoal!

    O meu objectivo com a seguinte função é "armazenar" as três primeiras letras do apelido de um dado nome, ou seja, de um nome como "José Rodrigues dos Santos" ficar só com "San", o problema é que com a seguinte função não consigo apanhar o último espaço dando sempre o seguinte erro:



    ""c:\users\mac\documents\visual studio 2008\projects\gestao_de_bibliotecas\gestao_de_bibliotecas\main.cpp(116) : error C2446: '==' : no conversion from 'const char *' to 'int' There is no context in which this conversion is possible
    c:\users\mac\documents\visual studio 2008\projects\gestao_de_bibliotecas\gestao_de_bibliotecas\main.cpp(116) : error C2040: '==' : 'int' differs in levels of indirection from 'const char [2]' "


    A função é a seguinte:

    int main(){

    char nome[80]="jose malhoa",aplido[80],fim,i,j=0,e=0;


    fim=strlen(nome)-1;




    for(i=fim;i==e;i--)
    if(nome == " ")
    e=i;




    if(nome[0] != nome[e])
    ++e;


    while(j<3)
    aplido[j++]=nome[e++];

    }


    Será que me podem dar uma ajudinha?
     
  2. Boas,
    já não programo em C há algum tempo, mas pode ser algo deste tipo:

    Código:
    #include "stdafx.h"
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        char nome[]="José Rodrigues dos Santos";
        char apelido[80]="\0";
        char apelidoabreviado[5]="\0";
    
        //
        if(strlen(nome)>0)
        {
            //
            for(int i=strlen(nome)-1; i>=0; i--)
            {
                if(nome[i]==' ')
                {
                    strcpy(apelido, &nome[i+1]);
                    break;
                }
            }
            
            //
            if(strlen(apelido)>0)
            {
                int i=0;
                for(; i<3 && i<strlen(apelido); i++)
                    apelidoabreviado[i]=apelido[i];
                apelidoabreviado[i]=0;
            
            }
        }
        
        //
        cout << "Nome: " << nome << "\n\r";
        cout << "Apelido: " << apelido << "\n\r";
        cout << "Apelido abreviado: " << apelidoabreviado << "\n\r";
        getchar();
    
        return 0;
    }
    
     
    Última edição: 26 de Abril de 2012
  3. Obrigado, mas acabei por conseguir solucionar o problema da seguinte forma: ;)

    Código:
    char autor[50]="jose rodrigues",cota[4],fim,i,j=0,e=0,espaco[2]=" ";
    
    
    
    fim=strlen(autor)-1; //ultima posiÁao do nome
    
    
    for(i=fim;i>=e;i--)
        if(autor[i] == espaco[0])  //procura ˙ltimo espaÁo
            e=i;
    
    
    if(autor[0] != autor[e]) //no caso de n„o chegar ao inicio do nome do autor avanÁa uma posiÁ„o para avanÁar do espaÁo para a primeira letra do //apelido
        ++e;
    
    
    while(j<4)
        cota[j++]=autor[e++];
     
  4. J.Joao

    Boas J.Joao,

    o problema era que
    if(nome == " "), as aspas indicam que é uma string, e nome é um caracter, eu já vi que solucionaste o problema, mas podias ter feito

    if(nome == ' '), com plicas indica que é um caracter..

    Cumps


     
  5. mauro1855

    mauro1855 I'm cool cuz I Fold

    Boas, em C não "podes" fazer declarações a meio do código. Eventualmente poderás declarar variáveis dentro de novos blocos, mas em principio não dá para declarar um inteiro apenas dentro do início de um for();
    Entretanto, cout << "Nome: " etc não é C, é C++. Em C usa-se printf("Nome: %s\n", nome); ou fprintf(stdout, "Nome: %s\n", nome); ou então coisas mais baixo nível como o write();

    ------

    J.João, entretanto não sei se reparaste que o teu for() não estava a usar um contador normal de inteiros, mas sim um contador de caracteres. Por acaso funcionou, mas não sei se era bem isso que querias, e convém que tenhas cuidado nesse aspecto.
    Invés de teres
    Código:
    [LEFT][COLOR=#EDEDED]char autor[50]="jose rodrigues",cota[4],fim,i,j=0,e=0,espaco[2]=" ";
    [/COLOR][/LEFT]Devias era ter:

    Código:
     char autor[50]="jose rodrigues", cota[4], espaço[2]=" ";
    int fim, i, j = 0, e =0;
    
    
    Cumps
     

Partilhar esta Página