[ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Vynechanie medzier v reťazci

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26 | 26
Bydlisko: Kesa
NapísalOffline : 31.01.2012 11:51 | Vynechanie medzier v reťazci

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
Online

Skúsený užívateľ
Skúsený užívateľ
Vynechanie medzier v reťazci

Registrovaný: 11.01.09
Prihlásený: 30.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 31.01.2012 13:03 | Vynechanie medzier v reťazci

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.


Offline

Užívateľ
Užívateľ
Vynechanie medzier v reťazci

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26 | 26
Bydlisko: Kesa
Napísal autor témyOffline : 31.01.2012 13:48 | Vynechanie medzier v reťazci

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
 [ Príspevkov: 3 ] 


Vynechanie medzier v reťazci



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

EXCEL - vynechanie prázdnych buniek

v Ostatné programy

2

1741

02.06.2021 18:51

eon5

V tomto fóre nie sú ďalšie neprečítané témy.

vynechanie tabulky pri INSERT INTO

v PHP, ASP

5

574

02.03.2008 21:56

max-m

V tomto fóre nie sú ďalšie neprečítané témy.

Vynechanie alebo Pridelenie konktretneho pismena ext. HDD

v Operačné systémy Microsoft

2

751

21.03.2014 14:24

harm22

V tomto fóre nie sú ďalšie neprečítané témy.

odstranenie medzier

v PHP, ASP

9

1239

03.09.2008 17:14

Tominator

V tomto fóre nie sú ďalšie neprečítané témy.

odstranenie medzier

v PHP, ASP

4

1024

23.04.2010 23:09

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

Počet podreťazcov v reťazci

v PHP, ASP

1

329

28.04.2010 12:38

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

hladanie podretazca v retazci

v PHP, ASP

3

965

31.08.2008 22:35

Codik

V tomto fóre nie sú ďalšie neprečítané témy.

Nahradenie tagov v retazci

v PHP, ASP

3

416

17.06.2012 18:47

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Problem s URL v retazci

v PHP, ASP

7

359

03.12.2012 9:23

newboy1

V tomto fóre nie sú ďalšie neprečítané témy.

Hľadanie možných kombinácií v reťazci

v PHP, ASP

2

530

08.04.2011 15:36

jurov

V tomto fóre nie sú ďalšie neprečítané témy.

zalomenie textu bez medzier

v HTML, XHTML, XML, CSS

6

897

09.03.2009 21:13

pa3ck

V tomto fóre nie sú ďalšie neprečítané témy.

pridavanie medzier do stringu

v PHP, ASP

7

448

31.01.2009 21:38

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

Zistenie poslednych 3ch medzier

v PHP, ASP

5

481

27.02.2009 12:10

Tominator

V tomto fóre nie sú ďalšie neprečítané témy.

zobrazovanie znaku v retazci, jazyk C

v Assembler, C, C++, Pascal, Java

2

451

04.01.2012 20:49

svejk

V tomto fóre nie sú ďalšie neprečítané témy.

[VYRIESENE] Problem s mazanim textu v retazci

v PHP, ASP

1

408

16.03.2009 8:21

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

odstranenie niekolkych medzier aby bola jedna

v Assembler, C, C++, Pascal, Java

4

622

11.01.2010 15:41

ado21



© 2005 - 2024 PCforum, edited by JanoF