Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 19. 04. 2010 14:23

case_fcs
Příspěvky: 101
Reputace:   -1 
 

řetězec c++

ahoj, prosím o radu,

někdo zadá tento řetězec:

/prvni/druhy/treti

(je to včetně těch lomítek) a já potřebuju uložit jednotlivě ta slova, takže například v proměnné

word[0] bude slovo 'prvni'
word[1] = 'druhy'
word[2] = 'treti'

jak toho lze docilit?

Offline

  • (téma jako vyřešené označil(a) byk7)

#2 19. 04. 2010 15:16

septolet
Příspěvky: 334
Reputace:   
 

Re: řetězec c++

Nedavno jsme podobny problem resili s uzivatelem RePRO. Mimo jine jsem tam psal, ze lze vyuzit funkce strchr a strncpy z hlavickoveho souboru string.h. Samozrejme se predpoklada znalost pointerove aritmetiky a pointeru vubec.

Offline

 

#3 19. 04. 2010 15:51

Oxyd
Příspěvky: 614
Škola: MFF UK, teoretická informatika
Pozice: Student
Reputace:   31 
 

Re: řetězec c++

Když to má být C++, tak to lze vyřešit poměrně snadno bez pointerové aritmetiky a pointerů.  Stačí k tomu funkce std::getline, která čte ze streamu do stringu až do určeného oddělovače.

Code:

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

int main() {
  std::string const INPUT = "/prvni/druhy/treti";

  std::vector<std::string> words;
  std::string word;
  std::istringstream is(INPUT);  // Stream, ktery bude cist ze stringu INPUT.  Lze pouzit i std::cin, samozrejme.

  while (std::getline(is, word, '/')) {  // Z 'is' opakovane cti do 'word' az do znaku '/' tak dlouho, dokud je stream platny.
    if (!word.empty()) {
      words.push_back(word);
    }
  }

  for (unsigned int i = 0; i < words.size(); ++i) {
    std::cout << "words[" << i << "] = \"" << words[i] << "\"\n";
  }
}

Mýlím se častěji, než bych chtěl. Pokud vám v mém příspěvku něco nehraje, neváhejte se zeptat.
Jsem stále mlád a je mi příjemnější tykání. :)

Offline

 

#4 19. 04. 2010 16:06

case_fcs
Příspěvky: 101
Reputace:   -1 
 

Re: řetězec c++

ahoj dobře díky, ještě vlastně pardon, zapomněla sem napsat že to má být c++ ale trefil ses Oxyd :) a taky sem zapomněla napsat, že smim využít jen cstring, ale nějak pořád nerozumim tomu jak si někam uložim to slovo mezi lomítky a potom přejdu na další slovo mezi lomítky a to si zas taky někam uložim, nepochopila sem to ani když sem pročítala témata od repro, jak zde psat septolet, tak nešlo by to ještě přiblížit méně chápavému lajkovi jako jsem já prosím?

Offline

 

#5 19. 04. 2010 17:14 — Editoval RePRO (19. 04. 2010 17:18)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: řetězec c++

↑ case_fcs: Nevím, mám rád jednoduchost. Letím se učit, tak jsem Ti sem něco naplácal:

Code:

int polozka = 0;
while (true) {
      
      char c = cin.get();
      if ( c == '/') {
         if (polozka == 0) { hod do pole první; };
         if (polozka == 1) { hod do pole druhé; }; 
         if (polozka == 2) { hod do pole třetí; };
         polozka++;
      }
      if ( c == ' ') break;
}

Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson