Jak ze stringa wyłapać poszczególne zdania bez powtórzeń ?

0

Witam,

mam bowiem dowolną linie stringu np:


Warszawa [Polska],  Berlin [Niemcy], Nowy Jork [USA], Monachium [Niemcy]

Teraz chce aby utworzyć string z samymi państwami.


Państwa : Polska, Niemcy, USA


Jak wyciągnąc te państwa z nawiasu?

Próbowałem znak po znaku sprawdzać warunek '[', lecz potem w stringu mam dwa razy Niemcy, a należy jak w przykładzie ignorować powtórzenia...

3

Użyć set<string> oraz string::substring oraz porównanie znaków.
Może powiedz z czym masz problem?

0

Państwa wyłapujesz regexem: http://en.cppreference.com/w/cpp/regex/basic_regex
Potem w celu usunięcia powtórzeń masz dwie proste opcje do wyboru:

  1. zapisać je do std::unordered_set lub std::set http://en.cppreference.com/w/cpp/container/unordered_set
  2. wrzucić je do prawie dowolnego kontenera, np. std::vector, posortować i usunąć duplikaty std::unique: http://en.cppreference.com/w/cpp/algorithm/unique
2

Użycie RegExp'a przy tak prostych rzeczach powinno być karane, nie ma co wytaczać armatę na muchę:

#include<iostream>
using namespace std;

int main()
  {
   string str("Warszawa [Polska],  Berlin [Niemcy], Nowy Jork [USA], Monachium [Niemcy]");
   for(size_t pos=0,i=0;i<str.size();++i)
     {
      if(str[i]=='[') pos=i+1;
      else if(str[i]==']') cout<<str.substr(pos,i-pos)<<endl;
     }
   return 0;
  }

http://ideone.com/jphb0D

0

No i właśnie coś podobnego wpisałem, tylko teraz chce, by to wszystko wrzucić do jednego stringa
który zawierał by państwa bez powtórzeń, a nie wiem jak sprawdzić i wyrzucić powtarzające się.

cout "Państwa: "<< zmienna << endl;
//wynik: Państwa : Polska, Niemcy, USA

Konieczne będzie używanie tego regexpa? kompletnie nie czaje tej biblioteki

1

@tomek631 czytasz potrafisz?

Użyć set<string> oraz string::substring oraz porównanie znaków.
Może powiedz z czym masz problem?

pierwszy post

0

jak działa set<string> ? nie chce gotowych rozwiązań chce jakiś algorytm na to zadanie, a nie mam pomysłu i wiedzy w tym zakresie

czytam przykłady z uzyciem tego, ale nie ogarniam na jakiej zasadzie ma to hulać

2

http://www.cplusplus.com/reference/set/set/

Wystarczy opis przeczytać...

Podobny efekt mógłbyś osiągnąć tablicą asocjacyjną - map (same klucze byś musiał wypisać).

Jak chcesz algorytm... Przed dodaniem państwa do tablicy, sprawdzasz, czy nie znajduje się w tablicy. Jeśli się nie znajduje, to dodajesz państwo do tablicy, w przeciwnym razie nie dodajesz.

0

Co mi z opisu jak ja jestem newbie w c++? po polsku mało co rozumiem z tej abstrakcji, a Ty mi angielski przykład dajesz. W polskiej wiki tez gowno o tym jest, głównie wytłumaczenie dla osob siedzących w temacie. Szkoda, że na wiekszosci forów tak jest, ze jak prosisz o wytłumaczenie to tylko "idź poszukaj, sam sie dowiedz, poszukaj w google" a właśnie, szukam w google i odnosniki są to for, których jest napisane "idz poszukaj w google", albo nic nie ma.

Co do algorytmu, jak sprawdzić czy znajduje sie w tablicy? tym setem? set.find?

2
tomek631 napisał(a):

Co mi z opisu jak ja jestem newbie w c++? po polsku mało co rozumiem z tej abstrakcji, a Ty mi angielski przykład dajesz.

Więc przewiń do przykładu na dole.
Jeżeli z przykładu też nic nie rozumiesz to natychmiast zmieniaj kierunek.

0

tak by było poprawnie?

int main()
{


std::set<std::string> panstwo;
  std::set<std::string>::iterator it;
  std::pair<std::set<std::string>::iterator, bool> ret;
  std::string wynik; 
  panstwo.insert(" Czechy");
  panstwo.insert(" Niemcy");
  ret = panstwo.insert(" Czechy");
  it=ret.first;
  panstwo.insert (it," Polska");                
  panstwo.insert (it," Rosja");        
  panstwo.insert (it," Niemcy");               

  
  for (it = panstwo.begin(); it != panstwo.end(); ++it)
  {
	  std::cout << ' ' << *it;
	  wynik += (*it);
  }
    
  std::cout << '\n';
  std::cout << wynik;
  system("Pause");
  return 0;
 }
0
int main()
  {
   std::set<std::string> panstwo;
   panstwo.insert("Czechy");
   panstwo.insert("Niemcy");
   panstwo.insert("Czechy");
   panstwo.insert("Polska");                
   panstwo.insert("Rosja");        
   panstwo.insert("Niemcy");
   std::string wynik;
   for(auto it=panstwo.begin();it!=panstwo.end();++it) wynik+=(*it)+' ';
   std::cout<<wynik;
   //std::cin.get(); // jeżeli tego potrzebujesz to zmień IDE na jakieś z tego tysiąclecia.
   return 0;
  }

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