Portál AbcLinuxu, 11. května 2025 01:15

Dotaz: C++ cyklus

2.9.2011 14:43 ubka
C++ cyklus
Přečteno: 692×
Odpovědět | Admin

Dobry den,

v premmenej string mam zadefinovanych viac slov a potreboval by som jednotlive slova v cykles pouzit ako premenne.

priklad:   premenna="peter martin jano fero"

a program by postupne vypisal:

ahoj peter

ahoj jano a podobne

 

dakuje za radu


Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.9.2011 15:36 l4m4
Rozbalit Rozbalit vše Re: C++ cyklus
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejsnáze použitím boost::split, což ti dá vector stringů.

Šíleně, leč velmi C++-ově vytvořením strstreamu z premenna a čtením toho streamu po slovech.

Nebo prostě jako v C.
2.9.2011 23:07 _____ | skóre: 5 | blog: Poznámky
Rozbalit Rozbalit vše Re: C++ cyklus

To Boost řešení by vypadalo takhle:

#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <vector>

using namespace std;
using namespace boost::algorithm;

int main()
{
    string premenna="peter martin jano fero";
    vector<string> jmena;
    
    split(jmena, premenna, is_any_of(" "), token_compress_on); 
    
    BOOST_FOREACH(const string &jmeno, jmena) {
        cout << "ahoj " << jmeno << "\n";
    }
    
    return 0;
}
2.9.2011 15:36 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: C++ cyklus
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba takto? :-)
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <vector>


void pis(std::string &str) {
  std::cout << "Vitaj z hub " << str << ", kde mas ceren?" << std::endl;
}

void vypisto(std::string &str)
{
  std::istringstream iss(str);
  std::vector<std::string> slova;
  copy(std::istream_iterator<std::string>(iss),
       std::istream_iterator<std::string>(),
       std::back_inserter<std::vector<std::string> >(slova));
  //pozadovany cyklus :)
  for_each (slova.begin(), slova.end(),pis);

}

int main() {
  std::string tosplit = "peter martin jano fero";
  vypisto(tosplit);
}
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.9.2011 11:12 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
Rozbalit Rozbalit vše Re: C++ cyklus
Mas tam chybu ;-)

s/hub/ryb/ alebo s/ceren/kosik/
Project Satan infects Calculon with Werecar virus
2.9.2011 15:38 malformed | Praha
Rozbalit Rozbalit vše Re: C++ cyklus
Odpovědět | | Sbalit | Link | Blokovat | Admin
vlozit do string streamu a pak nad tim iterovat:

int main()
{
    std::string names("peter martin jano fero");
    std::istringstream iss(names);

    typedef std::istream_iterator<std::string> iss_iterator;

    for(iss_iterator it(iss); it != iss_iterator(); ++it)
        std::cout << "ahoj " << *it << std::endl; 

    return 0;
}
2.9.2011 16:12 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: C++ cyklus
Nebo to z toho streamu lze rovnou číst pomocí >>
2.9.2011 19:47 yuukimaru
Rozbalit Rozbalit vše Re: C++ cyklus
cili nejak takto:
std::string names("peter martin jano fero");
std::istringstream iss(names);
std::string sub;

while(iss >> sub){
    std::cout << "ahoj " << sub;
}
3.9.2011 13:50 ubka
Rozbalit Rozbalit vše Re: C++ cyklus
dakujem vsetky za radu velmi mi to pomohlo
3.9.2011 16:31 a
Rozbalit Rozbalit vše Go cyklus
Odpovědět | | Sbalit | Link | Blokovat | Admin
package main

import "fmt"
import "strings"

func main() {
        a := "peter martin jano fero"
        for _, s := range strings.Split(a, " ") {
                fmt.Printf("ahoj %s\n", s)
        }
}
3.9.2011 18:48 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Go cyklus
Obávám se, že se svou představou o syntaxi C++ u překladačů moc pochopení nenaleznete…

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.