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
}