2017-05-25 15 views
2

文字列に存在するすべての一意の文字を見つける方法がありません。文字列のすべての文字列が見つかりませんか? たとえば、文字列a = "mississippi"とすると、出力は{i、m、p、s}になります。 C++でそれを見つけるためのinbuilt関数はありますか?文字列内に存在する異なる文字を見つける

+1

どのように 'のstdを使用する方法について::セット? – hallazzang

+0

しかし、これらの文字は一意ではありません。タイトルは言い換えればいいと思う。 – CroCo

+0

[STLを使用して文字列から重複文字を削除する]の可能な複製(https://stackoverflow.com/questions/21121324/removing-duplicate-characters-from-string-using-stl) – CroCo

答えて

0

STLの一部ではないほど珍しい音です。
私は単純に文字列を反復し、ハッシュセット内の数字の数を増やしてみることにします。次に、すべてのキーをつかんで一意の値を決定します。 幸運

2

文字のsetを作成し、すべての項目を文字列にすると、文字列の「アルファベット」で設定されます。

は、例えば:

#include <string> 
#include <iostream> 
#include <set> 

int main(void) 
{ 
    std::string a = "mississippi"; 
    std::set<char> alphabet; 
    alphabet.insert(a.begin(), a.end()); 
    std::cout << "Set of chars has " << alphabet.size() << " items." << std::endl; 
    for (auto a : alphabet) 
    { 
     std::cout << a << std::endl; 
    } 
} 

オリジナル文字列がその例では変更されていないとの事前ソートをする必要はありません。あなたはstd::sort, std::unique, std::string::erase

使用していることを行うことができます

+0

1つの推奨事項:ドキュメントリンクをhttp ://en.cppreference.com/w/cpp/container/set。これは一般に、より完全で信頼性の高い情報源です。 – user4581301

+0

@ user4581301提案に感謝 - リンクが変更されました – VolAnd

7

:元の文字列が変更されますが、[あなたはそれはそれのコピーを作成したくない場合]

std::string str = "mississippi"; 
std::sort(std::begin(str), std::end(str)); 
auto last = std::unique(std::begin(str), std::end(str)); 
str.erase(last, std::end(str)); 
+0

完全に本格的な「セット」を構築するよりも優れていると思います。 –

関連する問題