[c++] Układanie string 'a z char 'owej tablicy.

0

cześć mam problem z funkcja c_str();

ogółem mam tablicę typu char. każdy element tablicy (tab[0], tab[1], tab[2] ...) to jeden znak. Chciałbym z tych pojedynczych znaków ułożyć jeden ciąg typu string. do tej pory mam to:

#include <cstdlib>
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

int main(int argc, char *argv[])
{
    int i;
    string zmienna;
    char tab[5];
    
    tab[0]='H';
    tab[1]='e';
    tab[2]='l';
    tab[3]='l';
    tab[4]='o';
    
    for (i=0; i<5; i++) {
            zmienna += tab[i].c_str(); 
            } 
    
    cout << zmienna;
    _getch();
    

    
    system("PAUSE");
    return EXIT_SUCCESS;
}

na co dev++ odpowiada mi:

C:\Dev-Cpp\dsa\main.cpp In function int main(int, char**)': 22 C:\Dev-Cpp\dsa\main.cpp c_str' has not been declared
22 C:\Dev-Cpp\peb\main.cpp request for member of non-aggregate type before '(' token
C:\Dev-Cpp\peb\Makefile.win [Build Error] [main.o] Error 1

jest w stanie mi ktoś pomóc ? ;-)

jeśli tak to prosiłbym również o skomentowanie poprawionego kodu,

pozdrawiam,
TroYan
</cpp>

0

Nie wiem skąd to wziąłeś ale char nie ma metod! Wiec nie ma sie co dziwić reakcją kompilatora.
Klasa std::string ma odpowiednie konstruktory do budowania obiektu z tablicy char'ów:

http://cplusplus.com/reference/string/string/string/

Chodzi mi dokładnie o ten: string ( const char * s, size_t n );

pozdro.

0

Problem rozwiązany. dziękuję za podpowiedź. po kilku rzuconych "ku**ach" esencja mojego problemu wygląda tak:

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
    int i=0;
    string zmienna;
    char tab[5];
    
    tab[0] = 'H';
    tab[1] = 'e';
    tab[2] = 'l';
    tab[3] = 'l';
    tab[4] = 'o'; 
        
    while (i<5) {
          string(tab[i], 1); 
          i++; 
    }      
    
    for (i=0; i<5; i++) {
            zmienna += tab[i]; 
            } 
    
    cout << zmienna "\n";
   
    

    
    system("PAUSE");
    return EXIT_SUCCESS;
}

jeżeli ktoś kiedyś programował tak jak ja w PHP to ten fragment jest pomocny w stworzeniu PHP'owej funkcji explode().

pozdrawiam,
TroYan.

0

Co to robi?

    while (i<5) {
          string(tab[i], 1);
          i++;
    }      

Na moje oko jest to zupełnie niepotrzebne.

0

ale ty kombinujesz, to są podstawy C i C++!

    string zmienna;
    char tab[6];
   
    tab[0] = 'H';
    tab[1] = 'e';
    tab[2] = 'l';
    tab[3] = 'l';
    tab[4] = 'o';
    tab[5] = 0; // oznaczenie końca napisu
    zmienna=tab;
// albo 
     zmienna.resize ( 5 );
     zmienna.copy(tab,5);

a normalnie to powinno być tak:

    string zmienna;
    char tab[6]="Hello"; // i zawartość tab jest taka sama jak wcześniej
    zmienna=tab;
// albo 
     zmienna.resize ( 5 );
     zmienna.copy(tab,5);
0

lub od razu tworzac obiekt string:

std::string chain(tab, 6);

@TroYan: Nie wiem jaki sens tworzyc 5 obiektow string w petli jak i tak ich nie zapamiętujesz...

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