Pytanie o ułatwienie ifa

0

Witam,
piszę sobie program, który ma robić coś takiego, jeżeli znak należy do zbioru: { } , . ( ) ; - > < = !
to go olej. reszte dodaj do wyrazu.
przy spacji czysci sobie "wyraz"

musiałbym robić to ifem

string wyraz;
for (int i=0; i< linia.size();++i)
            {
                if(linia[i]==' ') wyraz.clear();
                else if (linia[i]=='}'|| linia[i] == '{' || (i tak dalej) ) continue;
                wyraz+=linia[i];
            }

czy jest jakiś sposób, żeby wpisać cos w stylu

if(linia[i]== [mojzbior]) zrob costam; 

chodzi o to, żeby nie pisać ciągle linia[i] == X || linia[i]== Y ... tylko od razu if znak nalezy do zbioru

0

Jemu chyba bardziej się regexp przyda niż find.

0

wpadłem teraz na pomysł:
zrobię sobie tablicę znaków, które muszę pomijać i zapętlę to forem ;D

bool pomin=false;
for(int j=0; j< rozmiar_tab; ++j)
{ if(linia[i]==tablica_znakow[j]) 
    pomin=true;
}
if(pomin) continue;

powinno działać ;D bo w sumie tak czy siak COŚ musiałoby mieć taką tablicę i ją przelatywać, więc zamiast korzystać z funkcji to ją napiszę i tyle. nie jest zbyt trudna.

EDIT:
zmiana planów, za dużo zabawy w tablicę.
w sumie mogę mieć tylko znaki alfanumeryczne, podkreslenie i to chyba wszystko. więc zrobie isalnum || '_'; czy cos w tym stylu

2

C++11:

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>

int main() {
	std::string charsToRemove = "{}[]()<>,.";
	std::string line = "Ala, m{}a\tkota";
	std::vector<std::string> words;

	while (line.size() > 0) {
		std::string w;
		size_t start = line.find_first_not_of(" \t");
		if (start == std::string::npos)
			break;
		size_t end = line.find_first_of(" \t", start + 1);
		if (end == std::string::npos)
			end = line.size();
		std::copy_if(line.cbegin() + start, line.cbegin() + end, std::back_inserter<std::string>(w), [&](char c) { return charsToRemove.find_first_of(c) == std::string::npos; });
		words.push_back(w);
		line = line.substr(end);
	}
	std::copy(words.cbegin(), words.cend(), std::ostream_iterator<std::string>(std::cout, "\n"));
}

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