Sprawdzanie czy drugi napis znajduje się na początku pierwszego ( C )
Ostatnio zmodyfikowano 2016-04-10 23:24
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ą.. |
|
Kaikso |
» 2016-04-10 23:24:49 Nie jestem pewny czy o to chodzi: 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; } |
|
« 1 » |