To nie ma prawa działać. https://wandbox.org/permlink/7YKx1w0msJ8DL7g3
Czy raczej chodzi bardziej o to?
#include <iostream>
#include <cstring>
using namespace std;
string* fs(char *tab){
string *s=new string ;
for(int i=0; i<strlen(tab); i++){
s+=tab[i];
}
cout<<endl;
return s;
delete[]s;
}
int main()
{
int R=100;
char* ch=new char [R];
cin.getline(ch, R);
cout<<fs(ch);
return 0;
}
Blisko, ale na razie przesuwasz wskaźnik, zamiast dopisywać znaki do stringa. Ponadto, tutaj za usunięcie stringa powinna odpowiadać funkcja go otrzymująca (tutaj: main()
). Jest to ogółem słaby design, ale takie masz zadanie...
Mojego kodu z linka pokazującego, że nie ma potrzeby jechać znak po znaku przekazanego *char
skoro std::string ma konstruktor przyjmujący taki parametr też widzę nie obczaiłeś.
@MasterBLB: patrzyłem na ten kod i nie za bardzo rozumiem ten zapis string s(tab);
i ten kod zwraca stringa a nie wskaźnik
Tomek Nadrowski napisał(a):
@MasterBLB: patrzyłem na ten kod i nie za bardzo rozumiem ten zapis
string s(tab);
i ten kod zwraca stringa a nie wskaźnik
Zgadza się. Przerobienie tego zapisu na wskaźnik to twoje zadanie.
To dzięki! a możesz tylko wyjaśnić zapis string s(tab);
?
To konstruktor std::string
@MasterBLB: to już dobrze?
#include <iostream>
#include <cstring>
using namespace std;
string *fs(char* tab)
{
string s(tab);//przypisanie do stringa wartości z tab
return &s;
}
int main()
{
int R=100;
char* ch=new char [R];
cin.getline(ch, R);
cout << fs(ch);
//delete fs;
return 0;
}
Tylko jeszcze jak usunąć tą rezerwację z polecenia?
Nie, nie możesz zwracać referencji/wskaźnika do zmiennej lokalnej. W tym zadaniu musisz użyć new.