Armazenar Apelido

J.Joao

Membro
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?
 
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:
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++];
 
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


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

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