Wskaźniki, tablice char

0

To nie ma prawa działać. https://wandbox.org/permlink/7YKx1w0msJ8DL7g3

0

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;
}

1

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...

1

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ś.

0

@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

0
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.

0

To dzięki! a możesz tylko wyjaśnić zapis string s(tab); ?

1

To konstruktor std::string

0

@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?

1

Nie, nie możesz zwracać referencji/wskaźnika do zmiennej lokalnej. W tym zadaniu musisz użyć new.

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