Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sprawdzanie czy drugi napis znajduje się na początku pierwszego ( C )

Ostatnio zmodyfikowano 2016-04-10 23:24
Autor Wiadomość
fishu2
Temat założony przez niniejszego użytkownika
Sprawdzanie czy drugi napis znajduje się na początku pierwszego ( C )
» 2016-04-10 19:20:56
Witam! Z programowania mam zadanie o następującej treści:

"Napisz funkcję mającą w sumie trzy parametry - dwa napisy oraz wskaźnik na zmienną całkowitą. Zadaniem funkcji jest sprawdzić, czy drugi napis jest identyczny z początkiem pierwszego napisu (czyli czy pierwszy napis zawiera na swoim początku drugi napis). Jeżeli pierwszy napis nie zawiera drugiego funkcja ma zwrócić wskaźnik zerowy ( NULL ). W przeciwnym wypadku zwrócony ma zostać adres znaku (wskaźnik do miejsca w pierwszym napisie), który jest pierwszym znakiem nie występującym w drugim napisie. Ponadto funkcja powinna w poprzez trzeci parametr (wskaźnik) zwrócić długość drugiego napisu. W funkcji nie wolno używać funkcji strlen(). Funkcję należy dwukrotnie wywołać w main() z przykładowymi danymi (raz dla przypadku gdy drugi napis występuje na początku pierwszego, a drugi raz - gdy nie występuje) i jeżeli to możliwe to wypisać zawartość pamięci znajdującej się pod zwróconym przez return adresem oraz długość drugiego napisu."

Program mam napisany i o ile pokazuje mi adres znaku i adres pamięci, to wartość znaku jest zła, bo wskazuje na litere "a" a powinno na "n"... Nie wiem już co i gdzie mam poprawić :( Poniżej wstawiam kod programu, który już napisałem:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int podstring(char tab1[], char tab2[]){
    char *wsk=NULL;
    int adres;
    int i;
    for(i=0;i<sizeof(tab2);i++){
            adres=tab1;
        if(tab2!=tab1){
            return wsk;
        }
        else if(tab2==tab1){
            printf("Wartosc znaku: %d\n", adres);
            printf("Adres znaku: %d\n", &adres);
                for(i=0;*(tab2+i)!='\0';i++){
                } printf("Dlugosc napis2: %d\n", i);
        }
    }
}
 
main(){
    int i, pam;
    char napis1[100]="alanoidalny";
    char napis2[100]="ala";
    char napis3[100]="doponoidalny";
    char napis4[100]="lokpano";
 
    printf("Pierwsze wywolanie: \n");
    printf("\n");
    podstring(napis1, napis2);
 
    printf("\n");
 
    printf("Drugie wywolanie: \n");
    printf("\n");
    pam=podstring(napis3, napis4);
    printf("Adres pamieci: %d", &pam);
    printf("\n");
        for(i=0;napis4!='\0';i++){
        } printf("Dlugosc napis4: %d\n", i);
        printf("\n");
 
system("PAUSE");
return 0;
}

Proszę o pomoc w doszlifowaniu programy, aby działał poprawnie. Z góry dziękuje!
PS: Tak wiem, że "int podstring(char tab1[], char tab2[])" ma 2 zamiast 3 parametrów, ale nie wiem za bardzo co miałby tam robić wskaźnik na zmienną całkowitą..
P-147166
Kaikso
» 2016-04-10 23:24:49
Nie jestem pewny czy o to chodzi:
C/C++
const char * podstring( const char * s1, const char * s2, size_t * n )
{
    * n = 0;
    if( * s1 != * s2 ) return NULL;
   
    do { ++* n; } while( *++s1 == *++s2 );
   
    return s1;
}
P-147180
« 1 »
  Strona 1 z 1