char* translate( const char* txt, char* original, char** subst );ktora przeglada tekst zrodlowy (txt) i dla kazdego znaku z tekstu zrodlowego, ktory wystepuje na pozycji i w napisie original (mozna zalozyc, ze original nigdy nie zawiera powtorzen znakow) wpisuje do napisu wynikowego napis subst[i]. Jesli dany znak z txt nie wystepuje w original to nalezy go skopiowac bez zmian to napisu wynikowego. (Prosze zwrocic uwage, ze subst powinno byc interpretowane jako tablica napisow.) Scisle, argumenty naszej procedury sa nastepujace:
Przyklad wywolania:
char* wynik = 0; char* podmiana[10]; podmiana[0] = "zero "; podmiana[1] = "jeden "; podmiana[2] = "dwa "; podmiana[3] = "trzy "; podmiana[4] = "cztery "; podmiana[5] = "piec "; podmiana[6] = "szesc "; podmiana[7] = "siedem "; podmiana[8] = "osiem "; podmiana[9] = "dziewiec "; wynik = translate("Numer: 123", "0123456789", podmiana); printf("%s\n", wynik);Po wykonaniu tego fragmentu kodu, na ekreanie program powinien wypisac:
Numer: jeden dwa trzyPanstwa program powinien poprawnie dzialac przynajmniej dla podanego przykladu (minimum na ocene pozytywna).
Oprocz funkcji translate, panstwa program powinien takze zawierac funkcje main demonstrujaca dzialanie programu (w wybrany przez Panstwa sposob).
int stringlen( const char* str ) void printrev( const char* str )Funkcja stringlen(str) powinna zwrocic dlugosc napisy str, a funkcja printrev(str) powinna wypisac napis str w kolejnosci od ostatniego znaku do pierwszego. W szczegolnosci, wykonanie:
int k; k = stringlen("wielblad"); printf("%d\n", k ); printrev("wielblad");powinno wypisac na ekran:
8 dalbleiwProsze nie korzystac ze standardowych funkcji dostepnych w bibliotekach jezyka C.
Przydatne informacje.
#include <stdlib.h> #include <stdio.h> int main( int, char** ) { /* tresc programu */ return 0; }
for( wyr1; wyr2; wyr3 ) wyr4;Zapis ten jest skrotem od
wyr1; while( wyr2) { wyr4; wyr3; }Petla wypisujaca liczby od 1 do 10:
for( int i=1; i<=10; ++i) print("%d\n", i);
char* str = 0; // wskaznik null -- nie wskazuje jeszcze nigdzieMajac dany napis str mozna sie odwolywac do jego kolejnych znakow jak do tablicy (ponizej const przed char*, gdyz napis do ktorego\ sie odwolujemy jest stala).
const char* str = "Ala ma kota"; printf("%c", str[0]); // wypisze A prnitf("%c", str[4]); // wypisze mKoniec napisu mozna poznac po tym, ze zawiera znak o kodzie 0. W przykladzie powyzej mamy, str[11]==0.
void printvert( const char* s ) { for( int i=0; s[i] != 0; i++ ) // przegladaj po kolei caly napis printf("%c\n", s[i] ); // wypisz aktualny znak, przejdz do nowej linii }Wywolanie printver("Krokodyl"); spowoduje, ze na ekranie pojawi sie:
K r o k o d y l
int swap( char* text, char* before, char* after );ktora dziala w nastepujacy sposob: przeglada napis text znak po znaku i wykonuje nastepujaca operacje: jesli znak text[i] wystepuje w napisie before na pozycji j to nalezy go zamienic na znak after[j]. W szczegolnosci, wywolanie
swap( text, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ");powinno spowodowac zamiane wszystkich malych liter w text na odpowiadajace im duze litery.
Funkcja powinna zwrocic 0 jesli proces zamiany sie udal i wartosc rozna od 0 (np -1) jesli wystapily bledy. Za blad nalezy uznac, na przyklad, jesil napisy before i after sa roznej dlugosci.
Przydatne informacje.
swap("Ala ma kota", " ", "-")jest niepoprawne.
Napisy dla swap nalezy wiec alokowac dynamicznie. Mozna to zrobic w nastepujacy sposob:
#includeGdy juz skonczymy pracowac z napisem text, nalezy zwolnic przydzielona dla niego pamiec w nastepujacy sposob:#include // ... char* text = 0; // zmienna na wskaznik do napisu // zaalokuj pamiec na napis 'Ala ma kota' text = (char*)malloc( strlen("Ala ma kota")+1 ); // sprawdz, czy udalo sie przydzielic pamiec if( text == 0 ) { printf("Nie udalo sie!"); exit(-1); } // skopiuj tekst "Ala ma kota" do nowoprzydzielonej pamieci w text strcpy( text, "Ala ma kota" );
free(text);
char* text = 0; text = new char[strlen("Ala ma kota")+1] ... delete []text;