Problém s medzerou
Problém s medzerou
Čaute, mám taký problém, chcem počítať medzery v stringu, ale takým spôsobom že keď ich dám za sebou viac, započíta sa to ako jedna. napríklad "Ahoj____svet" (medzery sú nahradene '_'). Výsledok programu by teda mal byt že sa tam nachádza 1 medzera a nie 4. Neviete my s tým pomôcť ? programujem v jazyku C.
Re: Problém s medzerou
Prejdi string znak po znaku a zakazdym ked narazis na medzeru, ktora pred sebou nema inu medzeru, niekam si taku medzeru zarataj. Takto zaratas vzdy len prvu medzeru v serii a zvysne medzery preskocis.
Re: Problém s medzerou
Ďakujem ako by to vyzeralo v kóde prosím ? moj kód ktory prechádza cely subor vyzerá takto :eMPiko napísal: 17 okt 2020, 16:25 Prejdi string znak po znaku a zakazdym ked narazis na medzeru, ktora pred sebou nema inu medzeru, niekam si taku medzeru zarataj. Takto zaratas vzdy len prvu medzeru v serii a zvysne medzery preskocis.
FILE *fr, *fw;
int c,velke,male,cislo,medzera,bonus,bonusmedzera;
velke = 0;
male = 0;
cislo = 0;
medzera = 0;
bonus = 0;
bonusmedzera = 0;
fr = fopen("VSTUP.TXT", "r");
if((fr = fopen("VSTUP.TXT", "r")) == NULL){
printf("nepodarilo sa otvorit subor na zapis");
exit(0);
}
while((c = fgetc(fr)) != EOF){
if(c >= 'A' && c <= 'Z')
velke++;
if(c >= 'a' && c <= 'z' )
male++;
if(c >= '0' && c <= '9')
cislo++;
if(c == ' ') ----> tu problem nemám tu počitam každú medzeru
medzera++;
if(medzera == ' '){ ---> problém mam tu neviem ako urobiť aby viac ratal ako jednu skušal som bonus = medzera -1 ale nefungovalo
???
}
}
fclose(fr);
printf("velke: %d\n",velke);
printf("male: %d\n",male);
printf("cisla: %d\n",cislo);
printf("medzery: %d\n",medzera);
printf("medzery_bonus: %d\n",bonusmedzera);
return 0;
Re: Problém s medzerou
int flag=0
while((c = fgetc(fr)) != EOF){
if(c >= 'A' && c <= 'Z')
velke++;
if(c >= 'a' && c <= 'z' )
male++;
if(c >= '0' && c <= '9')
cislo++;
if(c == ' ' && flag==0) {
medzera++;
flag=1;
}
}
Otazka je, ci toto “ahoj ako sa mas?” Ma mat jednu medzeru alebo 3. Ak 3, tak musis potom premennu flag nulovat v ifoch, kde zaznamenavas ine znaky.
while((c = fgetc(fr)) != EOF){
if(c >= 'A' && c <= 'Z')
velke++;
if(c >= 'a' && c <= 'z' )
male++;
if(c >= '0' && c <= '9')
cislo++;
if(c == ' ' && flag==0) {
medzera++;
flag=1;
}
}
Otazka je, ci toto “ahoj ako sa mas?” Ma mat jednu medzeru alebo 3. Ak 3, tak musis potom premennu flag nulovat v ifoch, kde zaznamenavas ine znaky.
Re: Problém s medzerou
Tam skôr ide o tom že ked bude napísane "Ahoj ako sa máš?" tak medzi ahoj ako je momentálne viac medzier, a tych viac medzier chcem počítať ako jednu. na tento problem neviem prísťigor91 napísal: 18 okt 2020, 11:18 int flag=0
while((c = fgetc(fr)) != EOF){
if(c >= 'A' && c <= 'Z')
velke++;
if(c >= 'a' && c <= 'z' )
male++;
if(c >= '0' && c <= '9')
cislo++;
if(c == ' ' && flag=0) {
medzera++;
flag=1;
}
}
Otazka je, ci toto “ahoj ako sa mas?” Ma mat jednu medzeru alebo 3. Ak 3, tak musis potom premennu flag nulovat v ifoch, kde zaznamenavas ine znaky.
Re: Problém s medzerou
No ved som ti to napisal, daj si tam tu pomocnu premennu, podla ktorej budes vediet, ze ta medzera tam uz je a bude to fungovat.
Re: Problém s medzerou
akurat to skusam ale nefungujeigor91 napísal: 18 okt 2020, 11:55 No ved som ti to napisal, daj si tam tu pomocnu premennu, podla ktorej budes vediet, ze ta medzera tam uz je a bude to fungovat.
-
CrazyJerry
Light Star
- Príspevky: 284
- Registrovaný: 12 jún 2014, 18:08
Re: Problém s medzerou
Ty chces v premennej medzera pocitat pocet znaov ' ' (medzera)stevo987 napísal: 18 okt 2020, 11:49 Tam skôr ide o tom že ked bude napísane "Ahoj ako sa máš?" tak medzi ahoj ako je momentálne viac medzier, a tych viac medzier chcem počítať ako jednu. na tento problem neviem prísť
a v premennej bonusmedzera pocet medzier medzi slovami? Teda ak je viac medzier za sebou, tak to beries ako bonusmedzera +1 ?
Re: Problém s medzerou
V premenej medzera pocitam kolko je tam medzier celkovo cize ked su medzi slovami medzeri 3 alebo 4 tak to pocita vsetkz a vypise kolko ich je dokopy. napr vo vete "ahoj__ako_sa__maš?" premena medzera napocita 5. No a premena bonus medzera by mala kazdu medzeru započitat len raz, čize aj ked pojde "ahoj__ako_sa__maš?" tak bonusmedzera napocita len 3.CrazyJerry napísal: 18 okt 2020, 12:18 Ty chces v premennej medzera pocitat pocet znaov ' ' (medzera)
a v premennej bonusmedzera pocet medzier medzi slovami? Teda ak je viac medzier za sebou, tak to beries ako bonusmedzera +1 ?
-
CrazyJerry
Light Star
- Príspevky: 284
- Registrovaný: 12 jún 2014, 18:08
Re: Problém s medzerou
Hore si pridaj premennu flag
a nahrad while:
Kód: Vybrať všetko
int c, velke, male, cislo, medzera, bonus, bonusmedzera, flag;
flag = 0;
Kód: Vybrať všetko
while ((c = fgetc (fr)) != EOF)
{
if (c >= 'A' && c <= 'Z')
{
velke++;
flag = 0;
}
if (c >= 'a' && c <= 'z')
{
male++;
flag = 0;
}
if (c >= '0' && c <= '9')
{
cislo++;
flag = 0;
}
if (c == ' ')
{
medzera++;
if(flag == 0){
bonusmedzera++;
flag = 1;
}
}
}
Re: Problém s medzerou
Ďakujem velmi pekne <3CrazyJerry napísal: 18 okt 2020, 12:31 Hore si pridaj premennu flaga nahrad while:Kód: Vybrať všetko
int c, velke, male, cislo, medzera, bonus, bonusmedzera, flag; flag = 0;Kód: Vybrať všetko
while ((c = fgetc (fr)) != EOF) { if (c >= 'A' && c <= 'Z') { velke++; flag = 0; } if (c >= 'a' && c <= 'z') { male++; flag = 0; } if (c >= '0' && c <= '9') { cislo++; flag = 0; } if (c == ' ') { medzera++; if(flag == 0){ bonusmedzera++; flag = 1; } } }