Formatowanie spacji na początku tekstu

0

Witam serdecznie.
Do napisania mam funkcję, która usuwać będzie wszystkie spacje z początku łancuchu znaków.
Wszystko ładnie działa, dopóki nie dochodzimy do wyświetlania przerobionej już tablicy - przy wpisaniu " kkk" rzeczywiście wyświetla "kkk", aczkolwiek przy wpisaniu " kkk zzz" ucina wyświetlanie po "kkk". Czy ktoś mógłby mi wyjaśnić w czym rzecz?

 #include <iostream>
#include <cstdlib>
#include <string.h>
using namespace std;

int usun(char t[])
{
	char d = strlen(t);
	char k[100];
	int s=0;
	for(int i=0; i<d ; i++)
	{
		if(t[i]==' ')
		{
			s++;
		}
		else;
		{
			break;
		}
	}
	if(s!=0)
	{
		
	strcpy(&t[s], &t[s+1]);
	}
	
	for(int i=0; i<d+1 ; i++)
	{
		cout<<t[i];
	}
	k[100]=t[100];
	return k[100];
}


int main()
{
	char t[100];
	cout << "Prosze wprowadzic tekst: "<<endl;
	cin >> t;
	usun(t);
	return 0;
}
2

zwracasz tablice ktora zostala stworzona w funkcji. jest to UB
powinienes wynikowa tablice przekazac jako parametr

do tego to jest C++. Czemu nie uzyjesz std::string? czemu nie uzyjesz std::replace?
http://en.cppreference.com/w/cpp/string/basic_string/replace

i Twoj algorytm tez nie jest poprawny.
Zastanow sie nad ta linijka
strcpy(&t[s], &t[s+1]);
szczegolnie nad wartoscia s

0

Na egzaminie nie możemy korzystać z biblioteki <cstring>.
Poprawiłem już na swój sposób, dziękuję za pomoc - kod dla chętnych

 #include <iostream>
#include <cstdlib>
#include <string.h>
#include <cstdio>
using namespace std;

char *usun(char t[])
{
	int i=0;
	while(t[i]==' ')
		{
			strcpy(&t[i], &t[i+1]);
		}
	return t;
}


int main()
{
	char t[100];
	gets(t);
		   cout<<"|"<<usun(t)<<"|";
        system("PAUSE");
	return 0;
}
2

Jeśli mógłbyś użyć string, to mógłbyś po prostu wykorzystać polecenie t.replace(" ", ""); i to bez żadnej pętli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1