Problém s medzerou

Programovacie jazyky, rady, poradňa...
stevo987
Novice
Novice
Príspevky: 6
Registrovaný: 17 okt 2020, 14:27

Problém s medzerou

Príspevok od používateľa stevo987 »

Č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.
eMPiko
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2215
Registrovaný: 11 jan 2007, 16:40

Re: Problém s medzerou

Príspevok od používateľa eMPiko »

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.
stevo987
Novice
Novice
Príspevky: 6
Registrovaný: 17 okt 2020, 14:27

Re: Problém s medzerou

Príspevok od používateľa stevo987 »

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.
Ďakujem ako by to vyzeralo v kóde prosím ? moj kód ktory prechádza cely subor vyzerá takto :
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;
igor91
Amateur
Amateur
Príspevky: 20
Registrovaný: 21 máj 2019, 12:43

Re: Problém s medzerou

Príspevok od používateľa igor91 »

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.
stevo987
Novice
Novice
Príspevky: 6
Registrovaný: 17 okt 2020, 14:27

Re: Problém s medzerou

Príspevok od používateľa stevo987 »

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.
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
Amateur
Amateur
Príspevky: 20
Registrovaný: 21 máj 2019, 12:43

Re: Problém s medzerou

Príspevok od používateľa igor91 »

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.
stevo987
Novice
Novice
Príspevky: 6
Registrovaný: 17 okt 2020, 14:27

Re: Problém s medzerou

Príspevok od používateľa stevo987 »

igor91 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.
akurat to skusam ale nefunguje
CrazyJerry
Expert
Expert
Príspevky: 194
Registrovaný: 12 jún 2014, 18:08

Re: Problém s medzerou

Príspevok od používateľa CrazyJerry »

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ť
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 ?
stevo987
Novice
Novice
Príspevky: 6
Registrovaný: 17 okt 2020, 14:27

Re: Problém s medzerou

Príspevok od používateľa stevo987 »

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 ?
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
Expert
Expert
Príspevky: 194
Registrovaný: 12 jún 2014, 18:08

Re: Problém s medzerou

Príspevok od používateľa CrazyJerry »

Hore si pridaj premennu flag

Kód: Vybrať všetko

 
 int c, velke, male, cislo, medzera, bonus, bonusmedzera, flag;
 flag = 0;
 
a nahrad while:

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;
        }
    }
  }
    
stevo987
Novice
Novice
Príspevky: 6
Registrovaný: 17 okt 2020, 14:27

Re: Problém s medzerou

Príspevok od používateľa stevo987 »

CrazyJerry napísal: 18 okt 2020, 12:31 Hore si pridaj premennu flag

Kód: Vybrať všetko

 
 int c, velke, male, cislo, medzera, bonus, bonusmedzera, flag;
 flag = 0;
 
a nahrad while:

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;
        }
    }
  }
    
Ďakujem velmi pekne <3
Napísať odpoveď