2025(e)ko martxoaren 28(a), ostirala

Ariketa 54 | Akronimoak

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");
}






  • Ariketa-54_Akronimoak.cbp | main.c  


 

iruzkinik ez:

Argitaratu iruzkina