IB001 Úvod do programování - Seminární skupina 25 a 26
Zpracování textu - zdrojový kód
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define STR_MAX 1024
void nactiVstup(char *str); // jmena v prototypu nemusi byt stejna
void velkaPismena(char*, char*); // nebo nemusi byt uvedena vubec
void malaPismena(char *str, char *vysledek); // doporucuji vsak jmena uvadet a zachovavat je
void obratRetezec(char *str, char *vysledek);
void spojRetezce(char *str, char *str2, char *vysledek);
void porovnejRetezce(char *str, char *str2, char *vysledek);
void najdiRetezec(char *str, char *str2, char *vysledek);
int main(void)
{
char vstup1[STR_MAX];
char vstup2[STR_MAX];
char vysledek[STR_MAX];
int volba = -1;
printf("Zadej retezec:\n> ");
nactiVstup(vstup1); // pokud predavam pole, tak nemusim pouzivat & ... &pole[0] = pole
printf("\nZadej co se ma udelat.\n"
"1: prevest retezec na velka pismena\n"
"2: prevest retezec na mala pismena\n"
"3: obratit retezec\n"
"4: zkopirovat retezec\n"
"5: doplnit text do retezce\n"
"6: porovnat retezec se zadanym\n"
"7: vyhleda zadane slovo\n"
"> ");
scanf("%d", &volba);
switch(volba)
{
case 1:
velkaPismena(vstup1,&vysledek[0]); // ukazka ekvivalentniho volani
break;
case 2:
malaPismena(vstup1,vysledek);
break;
case 3:
obratRetezec(vstup1,vysledek);
break;
case 4:
strcpy(vysledek,vstup1); // prime pouziti knihovni funkce srtcpy, pozor na poradi argumentu
break;
case 5:
printf("\nZadej retezec ktery se prida na konec:\n> ");
scanf("%*[^\n]"); scanf("%*c"); // pred zadanim dalsiho textu vycistime standartni vstup
nactiVstup(vstup2);
spojRetezce(vstup1, vstup2, vysledek);
break;
case 6:
printf("\nZadej retezec se kterym se prvni porovna:\n> ");
scanf("%*[^\n]"); scanf("%*c");
nactiVstup(vstup2);
porovnejRetezce(vstup1, vstup2, vysledek);
break;
case 7:
printf("\nZadej slovo ktere chcete v retezci vyhledat:\n> ");
scanf("%*[^\n]"); scanf("%*c");
scanf("%s",vstup2); // nacteme pouze jedine slovo
najdiRetezec(vstup1, vstup2, vysledek);
break;
default:
printf("Neznama operace!");
return -1;
}
printf("\n\nVstup1: %s\n", vstup1);
if(volba > 4) printf("Vstup2: %s\n", vstup2);
printf("\nVysledek: %s\n", vysledek);
return 0;
}
void nactiVstup(char *retezec)
{
//scanf("%s", retezec); // nacte pouze jedno slovo, take si vsimnete ze jsem nepouzil & - to proto, ze 'str' je jiz ukazatel do pameti
fgets(retezec, STR_MAX, stdin); // alternativni zpusob pro nacteni celeho radku
}
void velkaPismena(char str[], char vysledek[]) // vsimnete si, ze prototyp vypadal: void velkaPismena(char*, char*);
{
size_t delka = strlen(str);
for(size_t i = 0; i < delka; i++)
{
vysledek[i] = toupper(str[i]);
}
vysledek[delka] = '\0'; // nezapomente vzdy ukoncit retezec
}
void malaPismena(char *str, char *vysledek) // tady uz je prototyp zachovan
{
size_t delka = strlen(str);
for(size_t i = 0; i < delka; i++)
{
vysledek[i] = tolower(str[i]);
}
vysledek[delka] = '\0';
}
void obratRetezec(char *str, char *vysledek)
{
size_t delka = strlen(str);
for(size_t i = 0, j = delka - 1; i < delka; i++, j--)
{
vysledek[i] = str[j];
//vysledek[i] = str[delka-i-1]; // alternativa pokud nepouzijete druhou promennou
}
vysledek[delka] = '\0';
}
void spojRetezce(char *str, char *str2, char *vysledek)
{
size_t delka = strlen(str);
strcpy(vysledek,str); // pozor at si neprepisete vstupni retezce
strcat(vysledek, str2);
}
void porovnejRetezce(char *str, char *str2, char *vysledek)
{
if(strcmp(str, str2) == 0)
strcpy(vysledek,"retezce jsou shodne"); // vysledek = "retezce jsou shodne"; nebude fungovat protoze 'vysledek' je ukazatel
else
strcpy(vysledek,"retezce jsou rozdilne");
}
void najdiRetezec(char *str, char *str2, char *vysledek)
{
if(strstr(str, str2) > 0)
strcpy(vysledek,"retezce obsahuje zadany slovo");
else
strcpy(vysledek,"retezce neobsahuje zadane slovo");
}
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define STR_MAX 1024
void nactiVstup(char *str); // jmena v prototypu nemusi byt stejna
void velkaPismena(char*, char*); // nebo nemusi byt uvedena vubec
void malaPismena(char *str, char *vysledek); // doporucuji vsak jmena uvadet a zachovavat je
void obratRetezec(char *str, char *vysledek);
void spojRetezce(char *str, char *str2, char *vysledek);
void porovnejRetezce(char *str, char *str2, char *vysledek);
void najdiRetezec(char *str, char *str2, char *vysledek);
int main(void)
{
char vstup1[STR_MAX];
char vstup2[STR_MAX];
char vysledek[STR_MAX];
int volba = -1;
printf("Zadej retezec:\n> ");
nactiVstup(vstup1); // pokud predavam pole, tak nemusim pouzivat & ... &pole[0] = pole
printf("\nZadej co se ma udelat.\n"
"1: prevest retezec na velka pismena\n"
"2: prevest retezec na mala pismena\n"
"3: obratit retezec\n"
"4: zkopirovat retezec\n"
"5: doplnit text do retezce\n"
"6: porovnat retezec se zadanym\n"
"7: vyhleda zadane slovo\n"
"> ");
scanf("%d", &volba);
switch(volba)
{
case 1:
velkaPismena(vstup1,&vysledek[0]); // ukazka ekvivalentniho volani
break;
case 2:
malaPismena(vstup1,vysledek);
break;
case 3:
obratRetezec(vstup1,vysledek);
break;
case 4:
strcpy(vysledek,vstup1); // prime pouziti knihovni funkce srtcpy, pozor na poradi argumentu
break;
case 5:
printf("\nZadej retezec ktery se prida na konec:\n> ");
scanf("%*[^\n]"); scanf("%*c"); // pred zadanim dalsiho textu vycistime standartni vstup
nactiVstup(vstup2);
spojRetezce(vstup1, vstup2, vysledek);
break;
case 6:
printf("\nZadej retezec se kterym se prvni porovna:\n> ");
scanf("%*[^\n]"); scanf("%*c");
nactiVstup(vstup2);
porovnejRetezce(vstup1, vstup2, vysledek);
break;
case 7:
printf("\nZadej slovo ktere chcete v retezci vyhledat:\n> ");
scanf("%*[^\n]"); scanf("%*c");
scanf("%s",vstup2); // nacteme pouze jedine slovo
najdiRetezec(vstup1, vstup2, vysledek);
break;
default:
printf("Neznama operace!");
return -1;
}
printf("\n\nVstup1: %s\n", vstup1);
if(volba > 4) printf("Vstup2: %s\n", vstup2);
printf("\nVysledek: %s\n", vysledek);
return 0;
}
void nactiVstup(char *retezec)
{
//scanf("%s", retezec); // nacte pouze jedno slovo, take si vsimnete ze jsem nepouzil & - to proto, ze 'str' je jiz ukazatel do pameti
fgets(retezec, STR_MAX, stdin); // alternativni zpusob pro nacteni celeho radku
}
void velkaPismena(char str[], char vysledek[]) // vsimnete si, ze prototyp vypadal: void velkaPismena(char*, char*);
{
size_t delka = strlen(str);
for(size_t i = 0; i < delka; i++)
{
vysledek[i] = toupper(str[i]);
}
vysledek[delka] = '\0'; // nezapomente vzdy ukoncit retezec
}
void malaPismena(char *str, char *vysledek) // tady uz je prototyp zachovan
{
size_t delka = strlen(str);
for(size_t i = 0; i < delka; i++)
{
vysledek[i] = tolower(str[i]);
}
vysledek[delka] = '\0';
}
void obratRetezec(char *str, char *vysledek)
{
size_t delka = strlen(str);
for(size_t i = 0, j = delka - 1; i < delka; i++, j--)
{
vysledek[i] = str[j];
//vysledek[i] = str[delka-i-1]; // alternativa pokud nepouzijete druhou promennou
}
vysledek[delka] = '\0';
}
void spojRetezce(char *str, char *str2, char *vysledek)
{
size_t delka = strlen(str);
strcpy(vysledek,str); // pozor at si neprepisete vstupni retezce
strcat(vysledek, str2);
}
void porovnejRetezce(char *str, char *str2, char *vysledek)
{
if(strcmp(str, str2) == 0)
strcpy(vysledek,"retezce jsou shodne"); // vysledek = "retezce jsou shodne"; nebude fungovat protoze 'vysledek' je ukazatel
else
strcpy(vysledek,"retezce jsou rozdilne");
}
void najdiRetezec(char *str, char *str2, char *vysledek)
{
if(strstr(str, str2) > 0)
strcpy(vysledek,"retezce obsahuje zadany slovo");
else
strcpy(vysledek,"retezce neobsahuje zadane slovo");
}