• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Usunięcie nadmiaru spacji w ciągu znaków

Object Storage Arubacloud
0 głosów
1,127 wizyt
pytanie zadane 13 grudnia 2016 w C i C++ przez Kamyyylo Początkujący (460 p.)

Mam do zrobienia taki program:

Napisz funkcję formatującą zadany tekst w taki sposób
aby kolejne wyrazy lub liczby były pooddzielane dokładnie pojedynczymi spacjami.
Np. zamienającą tekst ”AAA   BBBBB     C     DD     EEEE       ”
na ”AAA BBBBB C DD EEEE”

Mam kod usuwający z początku i końca spacje :

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
	int  i, k;
	char ciag[100];
	cin.getline(ciag, 100);               
	while (ciag[0] == 32)            
	{
		i = 0;
		for (k = 1; ciag[i]!='\0'; k++)
		{
			ciag[i] = ciag[k];                  
			i++;                                
		}
	}
	i = 0;
	while (ciag[i] != 0)              
		i++;
	for (i--; ciag[i] == 32; i--)       
		ciag[i] = 0;                        
	cout << ciag << endl;         
	system("PAUSE");                   
	return 0;
}

Jednak nie wiem jak rozpisać kod żeby w środku usuwało nadmiar spacji. Ma ktoś jakiś pomysł ? 

 

1
komentarz 13 grudnia 2016 przez .kassad Gaduła (3,420 p.)
Przeszukujesz tablicę od lewej strony. Jeżeli i-ty wyraz tablicy jest spacją, sprawdzasz, czy wyraz i+1 też jest spacją. Jeżeli jest, przesuwasz wyraz spod indeksu i+2 na indeks i+1, i+3 na i+2 i tak aż do końca tablicy.

1 odpowiedź

0 głosów
odpowiedź 13 grudnia 2016 przez JojololomenPL Bywalec (2,580 p.)

Spróbuj czegoś takiego:


std::vector<std::string> words;
std::string help;

for(int i = 0; i < ciag.size(); ++i)
{
	if(ciag[i] != ' ')
		help += ciag[i];
	else
	{
		words.push_back(help);
		help = "";
	}
}

std::string result;

for(int i = 0; i < words.size(); ++i)
{
	result += words[i];
	result += " ";
}

 

komentarz 14 grudnia 2016 przez Kamyyylo Początkujący (460 p.)
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	
	int  i, k;
	char ciag[100];
	cin.getline(ciag, 100);
	while (ciag[0] == ' ')
	{
		i = 0;
		for (k = 1; ciag[i] != '\0'; k++)
		{
			ciag[i] = ciag[k];
			i++;
		}
	}
	i = 0;
	while (ciag[i] != 0)
		i++;
	for (i--; ciag[i] ==' '; i--)
		ciag[i] = 0;
	vector<string> words;
	string help;

	for (int i = 0; i < ciag.size(); ++i)
	{
		if (ciag[i] != ' ')
			help += ciag[i];
		else
		{
			words.push_back(help);
			help = "";
		}
	}

	string result;

	for (int i = 0; i < words.size(); ++i)
	{
		result += words[i];
		result += " ";
	}


	cout << ciag << endl;
	system("PAUSE");
	return 0;
}

 

Tak to ma wyglądać ? Pokazuje mi ze ciąg.size must have a class type. Czy nie ma jakiegoś innego sposobu na zrobienie tego ? za pomocą samych pętli np ? bez używania vector itp ? 

Podobne pytania

0 głosów
3 odpowiedzi 2,152 wizyt
0 głosów
1 odpowiedź 643 wizyt
pytanie zadane 18 czerwca 2021 w C# przez disaster Bywalec (2,120 p.)
0 głosów
0 odpowiedzi 282 wizyt
pytanie zadane 4 listopada 2020 w C i C++ przez saintx Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...