• 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,112 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,147 wizyt
0 głosów
1 odpowiedź 616 wizyt
pytanie zadane 18 czerwca 2021 w C# przez disaster Bywalec (2,120 p.)
0 głosów
0 odpowiedzi 280 wizyt
pytanie zadane 4 listopada 2020 w C i C++ przez saintx Nowicjusz (120 p.)

92,555 zapytań

141,402 odpowiedzi

319,553 komentarzy

61,939 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!

...