IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @203
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Bežme spolu a pomôžme deťom.

Príďte si zabehnúť s ČSOB nadáciou 2.6. od 10tej na Partizánsku lúku v BA. www.csobnadacia.sk

Macko Mr. Beana

Akcia -60% iba za 7,20 Eur www.najdarceky.eu

Optimalizujeme firemné IS

Váš dobrý informáčný systém v DOS vám upravíme na moderný systém. www.partnersoft.sk

Gardena pre záhradu

Všetko pre starostlivosť o záhradu a zavlažovanie trávnika! www.gardena.sk

Zákaznícka zóna Môj Orange

Pozrite si podrobný rozpis hovorov, spotrebu alebo si aktivujte služby. www.orange.sk

Vynechanie medzier v reťazci

Zaslať odpoveď
AutorSpráva
street_punk
Užívateľ
Užívateľ

Založený: 09.04.2011
Príspevky: 237
Bydlisko: Kesa
Vek: 22

PríspevokZaslal: Ut 31.01.12 12:51Odpovedať s citátomNávrat hore

Mám spraviť program, do ktoréhoho napíšem nejaký reťazec a vynechá mi medzeri. Zatial mi napadli 3 možnosti ako to spraviť.
1. Ošetriť to rovno pri načítavaní poľa (primitívne riešenie a podľa mňa by sa to tak nemalo robiť, lebo úlohou je načítať reťazec a z neho bynechať medzeri)
2. Vytvoriť si pomocný reťazec, kde prepíšem písmená bez medzier (toto je už dobré riešenie, ale zabere to viac času programu)
3. Ošetriť to rovno v tom reťazci. A tu mám ten problém, že mi to aj spraví, ale logicky mi tam zostanú zvyšné písmená (o koľko medzier sa posunie, toľko písmen zostane). Napríklad keď zadám ja som clovek, tak mi vypíše jasomclovekek. Myslel som si, že keď tam zadám nulový znak (podľa mňa by tam mal byť už, lebo pri načítavaní pola je, tak sa mi zvyšok roťazca zmaže.

kód:
#include <stdio.h>
#include <stdlib.h>

#define max 30

int nacitanie(char pole[]);
void vypis(char pole[], int dlzka);
void vynechanie_medzier(char pole[], int dlzka);

int main()
{
   char pole[max];
   int dlzka;

   dlzka = nacitanie(pole);
   vynechanie_medzier(pole, dlzka);
   vypis(pole, dlzka);

   putchar('\n');
   system("pause");
   return 0;
}

int nacitanie(char pole[])
{
   int i;
   char pom;

   for(i = 0; i < max - 1; i++)
   {
      pom = getchar();
      if(pom == '\n')
         break;
      pole[i] = pom;
   }
   pole[i] = '\0';

   return i;
}

void vypis(char pole[], int dlzka)
{
   int i;

   for(i = 0; i < dlzka; i++)
      putchar(pole[i]);
}

void vynechanie_medzier(char pole[], int dlzka)
{
   int i = 0, j = 0;

   for(i = 0, j = 0; i < dlzka; i++, j++)
   {
      if(pole[i] == ' ')
      {
         pole[j] = pole[i + 1];
         i++;   
      }
      pole[j] = pole[i];
   }
   //tu som si neni isty, ci mi ponechal aj 0 znak
}

_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Ut 31.01.12 14:03Odpovedať s citátomNávrat hore

Sprav to takto, je to jednoduchsie:
kód:
void vynechanie_medzier(char pole[], int dlzka)
{
   
   int i, j;

   for( i = 0; i < dlzka; i++ )           
   {
      if ( pole[i] == ' ' )
      {
         for ( j = i; j < dlzka; j++ )
            pole[j] = pole[j + 1];         
         i--;       /* ak je nasledujuci znak opat medzera, treba sa vratit na tento index */
      }
   }

}


Jednoducho ak najdes medzeru, cely string za nou ( vratane koncovej nuly ) presun o jednu poziciu. A takymto sposobom ti to bude fungovat aj v pripade, ze napises viacero medzier za sebou.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
street_punk
Užívateľ
Užívateľ

Založený: 09.04.2011
Príspevky: 237
Bydlisko: Kesa
Vek: 22

PríspevokZaslal: Ut 31.01.12 14:48Odpovedať s citátomNávrat hore

Díky, ide to. Ja som robil tú chybu, že som neposúval celý reťazec, ale len jednotlivé písmená, čiže mi vždy na konci zostali vystavačné.

_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Zobraziť informácie o autoroviOdoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd