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::string::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, botów: 0