ZER DAKIDAN: Arrayak eta kateak ezagutzen ditut. ZER IKASIKO DUDAN: Arrayen ariketa bat egingo dut. |
Esaldi bat fgets() bitartez irakurri ondoren (noski, azken INTRO karakterea kendu beharko da), esaldiaren hitzak banatu beharko dira eta horretarako strtok() funtzioa erabiliko da.
/* Ariketa-54_Akronimoak: kate bat emanik bere akronimoak lortzen ditu. */ // Datua fgets() bitartez irakurri ondoren, azken INTRO karakterea kendu beharko da. // Ariketaren funtsa strtok() funtzioaren erabileran dago. #include <stdio.h> #include <stdlib.h> // system(cls) funtziorako #include <string.h> // strtok(), strlen(), strcpy() eta strcspn() funtzioetarako #include <ctype.h> // toupper() funtziorako #include <stdbool.h> // bool datu-motarako #include <conio.h> // getch() funtziorako void AkronimoakLortu(char* sEsaldia, char* sEmaitza); void KateaIkusi(const char sKatea[101]); int main() { char sKatea[101]; char sKateKopia[101]; char sEmaitza[51]; char cAukera; int iReturnIndizea; int iZeroKarakIndizea; printf("Esaldi baten akronimoak lortzeko programa.\n\n"); // begizta nagusia do { // esaldia eskatu erabiltzaileari do { printf("Sar ezazu sarrerako testua: "); fgets(sKatea, sizeof(sKatea), stdin); iReturnIndizea = strcspn(sKatea, "\n"); printf("RETURN karakterea %d. posizioan dago\n", iReturnIndizea); iZeroKarakIndizea = strcspn(sKatea, "\0"); printf(" ZERO karakterea %d. posizioan dago\n", iZeroKarakIndizea); KateaIkusi(sKatea); sKatea[iReturnIndizea] = '\0'; // RETURN karakterea kendu //sKatea[strlen(sKatea)-1] = '\0'; // RETURN karakterea kentzeko } while (strlen(sKatea) == 0); // kate hutsa ez dugu onartzen strcpy(sKateKopia, sKatea); AkronimoakLortu(sKateKopia, sEmaitza); printf("%s ---> %s\n", sKatea, sEmaitza); // beste iterazio bat? printf("Beste testuren bat aztertu nahi duzu: (B ala E): "); do { cAukera = toupper(getch()); } while ((cAukera != 'B') && (cAukera != 'E')); system("cls"); // pantaila garbitzeko } while (cAukera != 'E'); return 0; } // Akronimoak lortzen dituen funtzioa, ssEsaldia sarrerako parametroa // espazioen arabera mozten joan eta iterazio bakoitzeko lehen letra hartu void AkronimoakLortu(char* sEsaldia, char* sEmaitza) { char *erakTokena; bool boLehendabizikoa = true; char sLaguntzailea[3]; // sarrerako katea larrietan jarri for(int i = 0; sEsaldia[i]; i++) { sEsaldia[i] = toupper(sEsaldia[i]); } // hitz bakoitzaren lehen letra hartu, parametroak: katea eta kate banatzailea erakTokena = strtok(sEsaldia, " "); while (erakTokena != NULL) { if (boLehendabizikoa) { sEmaitza[0] = erakTokena[0]; // hitzaren lehen letra sEmaitza[1] = '.'; // puntua sEmaitza[2] = '\0'; // null mugatzailea boLehendabizikoa = false; } else { sLaguntzailea[0] = erakTokena[0]; // hurrengo hitzaren lehen letra sLaguntzailea[1] = '.'; // puntua sLaguntzailea[2] = '\0'; // null mugatzailea strcat(sEmaitza, sLaguntzailea); // kateaketa } // hurrengo tokena eskuratu, parametroak: NULL eta kate banatzailea erakTokena = strtok(NULL, " "); } } // Katearen /0 karakterea ikusteko eta RETURN karakterea ikusteko void KateaIkusi(const char sKatea[101]) { printf("\n"); // sarrerako katea pantailaratu, bere luzera +1 karaktere erakutsiz for(int iKont = 0; iKont <= strlen(sKatea); iKont++) { printf("\t iKont=%d \t sKatea[iKont]=%c \t sKatea[iKont]=%d\n", iKont, sKatea[iKont], sKatea[iKont]); } printf("\n"); }
iruzkinik ez:
Argitaratu iruzkina