retazec
retazec
Uz neviem ako dalej.
chcem program v cecku, ktory nacita nejaky retazec napr babka.
Teda vypise "zadaj retazec" a ja napisem "babka" .
A teraz chcem pristupovat k jednotlivim znakom.
Nech ten retazec ma nazov str (ako string).
Tento str obsahuje znaky b a b k a ,jeho dlzka je 5.
Chcem aby mi vypisalo napr
str[1] je b.
str[2] je a
str[3] b
str[4] k
str[5] a
dakujem za pomoc
chcem program v cecku, ktory nacita nejaky retazec napr babka.
Teda vypise "zadaj retazec" a ja napisem "babka" .
A teraz chcem pristupovat k jednotlivim znakom.
Nech ten retazec ma nazov str (ako string).
Tento str obsahuje znaky b a b k a ,jeho dlzka je 5.
Chcem aby mi vypisalo napr
str[1] je b.
str[2] je a
str[3] b
str[4] k
str[5] a
dakujem za pomoc
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
Kód: Vybrať všetko
for (i=0; i<dlzka; i++)
printf("str[%d] je: %c\n", i+1, retazec[i]);jaaaaaaaj ja som lama ja som str deklaroval ako "%s" a ono malo byt "%c"neutronmind napísal:Inak retazce (a polia) zacinaju vzdy od nuly, retazce taktiez koncia znakom '\0', cize vzdy pre ne treba alokovat o jeden prvok viac ako je potrebne - to je len take upozornenie, byva to zdrojom chyb.Kód: Vybrať všetko
for (i=0; i<dlzka; i++) printf("str[%d] je: %c\n", i+1, retazec[i]);
dakujem.
estema zaujma ze ked mam str ako str[10] a zadam 12 znakov tak mi ich vypise vsetky 12 ako sa takato chyba osetruje aby to robilo tak ako je nadeklarovane.
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
vyriesene:
Kód: Vybrať všetko
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
main()
{
FILE *vstup;
int i;
char str[80];
clrscr();
vstup=fopen("b.txt","r");
while(fgets(str,80,vstup)!=NULL)
{
for(i=0;i<strlen(str);i++)
str[i]=toupper(str[i]);
printf("%s",str);
}
fclose(vstup);
getch();
}
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
Dalo sa to aj casovo a pamatovo efektivnejsie:
Kód: Vybrať všetko
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
int main(void)
{
FILE *vstup;
int c;
clrscr();
vstup=fopen("b.txt","r");
while ((c=getc(vstup))!=EOF)
putchar(toupper(c));
fclose(vstup);
getch();
}tiez ma to napadlo, ale islo mi o technicku pracu s retazcom a jeho parametrami. Teda to int c malo byt char c[x], alebo char *c.
Ale v pripade nudze je aj toto good riesenie, dik.
//autoeditácia príspevku ( 23 Jan 2009, 16:19 )
da sa pomocou strchr najst viacnasobny vyskyt znaku?
strchr mi najde iba vyskyt prveho znaku a ukonci hladanie, ako to mam spravit aby hladal az do konca.
Ale v pripade nudze je aj toto good riesenie, dik.
//autoeditácia príspevku ( 23 Jan 2009, 16:19 )
da sa pomocou strchr najst viacnasobny vyskyt znaku?
strchr mi najde iba vyskyt prveho znaku a ukonci hladanie, ako to mam spravit aby hladal az do konca.
Ja som si napisal take nieco ale myslel som ze to bude troska jednoduchsie.chrono napísal:Potrebnú funkciu si musíš napísať sám (buď použiješ strchr v cykle a vždy začneš hľadať za nájdeným znakom, alebo tam dáš cyklus, ktorý bude prechádzať celý reťazec...).
Este si neviem poradit s jednim prikloadom:
napiste funkciu xxxx(char *s1, char *s2, int i);
ktora vlozi do retazca s1 od pozicie i retazec s2. Vyuzite funkciu strcat().
Musíš si vytvoriť buffer, ktorý bude veľký strlen(s1) + strlen(s2) + 1; Doň potom skopíruješ ten reťazec s1 (kľudne celý, bude to tak jednoduchšie; môžeš použiť strcpy prípadne aj strcat). Na i-tu pozíciu potom vložíš znak '\0', pomocou str cat tam pripojíš s2 a nakoniec zvyšok toho reťazca s1 (teda niečo ako &(s1)).