pytanie odnośnie stringów

0

zacznę od tego że jestem początkującym "programistą"
a tu mam kodu programu

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

using namespace std;

int main(int argc, char *argv[])
{
    string zrodlo= "to jest zrodlo", cel;
    cout<< zrodlo<<endl;
    
    int dl=zrodlo.length();
    cout<< dl<<endl;
    
    for (int i=0; i<dl; i++)
    {
      if( zrodlo[i] == ' ')
      {
         break;
          
      }  
      else
      {
        cel[i] = zrodlo[i];  
      }
        
    };
    cout<<cel;
    
    cout<< endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
 

jest to fragment kodu programu, tu ograniczyłem go do wycinania fragmentu ciągu znaków do znaku spacji.
No i pojawia się problem przy tym gdy chce wyświetlić kod do spacji który jest skopiowany do innej zmiennej.

mogę się normalnie odwoływać do poszczególnych znaków tej zmiennej, ale gdy chce ją wyświetlić całą to nic się nie wyświetla, tak samo jeśli chodzi o długość skopiowanego tekstu, wyświetla się 0.

Da się coś z tym zrobić? Jeśli się nie da, to mogę zmienić kod (zliczenie w którym miejscu jest spacja i wyświetlenie do tego momentu) i wiem że będzie działał, to jest bardziej pytanie żeby zaspokoić ciekawość

1

A jaki jest rozmiar celu? Zamiast cel[i] = zrodlo[i] napisz cel.push_back(zrodlo[i]).

BTW
Wywal system("PAUSE"); oraz użyj iteratorów do przemieszczania się po stringu.

1
cel[i] = zrodlo[i];  

A cel[i] to jest tak właściwie co? Przeanalizuj:

#include <iostream>
#include <string>
#include <sstream>

int main() {
    using namespace std;

    string zrodlo = "to jest zrodlo";
    string cel;

    cout << "zrodlo == '" << zrodlo << "'\n";
    
    int len = zrodlo.length();
    cout << "len == " << len << "\n";

    for (int i = 0; i < len; ++i) {
        if (zrodlo[i] == ' ') {
            break;
        } else {
            cel.push_back(zrodlo[i]);
        }
    }

    cout << "cel == '" << cel << "'\n";
    
    //iteratory:
    cel = "";
    for (string::const_iterator it = zrodlo.begin(); it != zrodlo.end(); ++it) {
        if (*it == ' ') {
            break;
        } else {
            cel.push_back(*it);
        }
    }
    cout << "cel == '" << cel << "'\n";

    //ale, łatwiej:
    cel = zrodlo.substr(0, zrodlo.find(' '));
    
    cout << "cel == '" << cel << "'\n";

    //lub:
    stringstream ss(zrodlo);
    getline(ss, cel, ' ');
    
    cout << "cel == '" << cel << "'\n";
    
    return 0;
}
0

nie pasowało mi coś z tym cel[i] (chciałem żeby odwoływało się to do kolejnego elementu w zmiennej), samo to wydawało mi się głupie, ale nie miałem innego pomysłu...

dzięki za pomoc

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