[ chalka @ 31.12.2005. 01:28 ] @
molim vas da mi pomognete ja sam nesto pokusao ali mi ne ide bas ovaj unos ni ispis u glavnoom programu inace jedna nesto malo kontam iz ovih pokazivaca i stringova

zadatak glasi :
1. Napisati funkciju s imenom adresa() koja kao argument uzima dva stringa koji predstavljaju ime i
prezime a kao rezultat vraća novi string koji se dobije tako da se string koji predstavlja prezime
promijeni u string koji predstavlja e-mail adresu slijedećeg oblika:
[prezime].[ime]@yahoo.com
Prototip funkcije je:
char *adresa(char *ime, char *prezime)
Na primjer, ako su argumenti ime=“Marko“, prezime=“Markovic“ funkcija adresa() vraća pokazivač
na rezultirajući string prezime koji je promijenjen u novi string oblika:
[email protected]
Nakon toga, napisati glavni program koji učitava ime i prezime neke osobe i na standardnom izlazu
ispisuje toj osobi pridruženu e-mail adresu koja se dobije pozivom funkcije adresa().


moj pokusaj:

Code:

#include<stdio.h>
char *adresa(char *ime, char *prezime)
{
    int i;
    char ostatak[]="@yahoo.com";
    char *p=prezime;
    while(*prezime !='\0')
    {
        prezime++;
    }
    *prezime='.';
    prezime++;
    while (*ime='\0')
    {
        *prezime=*ime;
        prezime++;
        ime++;
    }
    i=0;
    while(ostatak[i]='\0')
    {
        *prezime=ostatak[i];
        prezime++;
        i++;
    }
    *prezime='\0';
    return p;
}
int main()
{
    char ime[20], prezime[30];
    printf("\nUnesite ime: ");
    scanf("%c", &ime);
    printf("\nUnesite prezime: ");
    scanf("%c", &prezime);
    while (*adresa(ime,prezime)!='\0')
    {
        printf("%c",*adresa(ime,prezime));
        *adresa(ime,prezime)=*adresa(ime,prezime)+1;
    }
    return 0;
}

ovo sam malo uz materijale sa predavanja napisao ali upadnem u neki beskonacno dugi ispis nekih brojeva (ne znam vec kako se to zove)
molim pomozite mi

hitno mi je!
[ BigSmallMan @ 31.12.2005. 09:10 ] @
Mozda moze nesto ovako:

Code:
#include<stdio.h>
#include<string.h>

char *adresa(char *ime, char *prezime)
{
    strcat(prezime, ".");
    strcat(prezime, ime);
    strcat(prezime, "@yahoo.com");
    
    return prezime;
}
int main()
{
    char ime[100], prezime[100];

    printf("\nUnesite ime: ");
    scanf("%s", &ime);
    printf("\nUnesite prezime: ");
    scanf("%s", &prezime);
    printf("\n%s\n\n",adresa(ime,prezime));
    
    return 0;
}
[ Mali Misha @ 31.12.2005. 09:19 ] @
Da li neko pazi na konverziju velikih u mala slova?

Ako radis staticko resenje (sto je verovatno slucaj), verovatno zelis da koristis staticki niz unutar f-je koja resava problem ili neki globalni. U svakom slucaju se vraca pokazivac na njega. Evo primera dinamickog resenja:

Code:
// dinamicki...

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

unsigned int strl(const char*p)
{
    const char * q = p;
    while(*q) q++;
    return q-p;
}

void strcatlow(char *dest,const char*src)
{
    while(*dest) dest++;
    while(*dest = tolower(*src)) dest++,src++;
}

char *adresa(char *ime, char *prezime)
{
    static char add[] = "@yahoo.com";
    
    char * p = (char*) malloc( strl(ime) + 1 + strl(prezime) + strl(add) + 1 );
    *p = 0;
    strcatlow(p,ime);
    strcatlow(p,".");
    strcatlow(p,prezime);
    strcatlow(p,add);

    return p;
}

main()
{
    char * p = adresa("Milan","Milanovic");

    printf("%s",p);

    // ne zaboraviti...
    free ( p ) ;
    
    return 0;
}
[ Mali Misha @ 31.12.2005. 09:22 ] @
1. U gornjem kodu treba prvo dodati prezime pa ime. Trenutno stoji obrnuto.
2. Uzgred, input stringova ide sa:
Code:
char a[30];
scanf("%s",a);

3. Mislim da yahoo ne dozvoljava tacke unutar imena naloga...

[Ovu poruku je menjao Mali Misha dana 31.12.2005. u 10:39 GMT+1]
[ darkon @ 31.12.2005. 15:14 ] @
Evo tvog rešenja, ali naravno malo modofikovanog. Ovo treba da radi:

Code:
#include<stdio.h>

char *adresa(char *ime, char *prezime)
{
    int i;
    char ostatak[]="@yahoo.com";
    char *p=prezime;
    while(*prezime !='\0')
    {
        prezime++;
    }
    *prezime='.';
    prezime++;
    while (*ime!='\0')
        *prezime++=*ime++;

    i=0;
    while(ostatak[i]!='\0')
        *prezime++=ostatak[i++];
        
    *prezime='\0';

    return p;
}
int main()
{
    char ime[20], prezime[30];
    char *pp;
    
    printf("\nUnesite ime: ");
    scanf("%s", &ime);
    printf("\nUnesite prezime: ");
    scanf("%s", &prezime);
    
    pp=adresa(ime,prezime);
    
    while (*pp !='\0')
        printf("%c",*(pp++));
        
    printf("\n");
    
    return 0;
}
[ Mali Misha @ 31.12.2005. 15:26 ] @
Novogodisnja zona sumraka oko i/o stringova u C. Idem ja negde drugde do 1.1. ;)
[ yooyo @ 31.12.2005. 22:51 ] @
Code:

sprintf(adresa, "%s.%[email protected]", ime,prezime);


samo vodi racuna da u adresa ima dovoljno mesta...

yooyo