我有一个包含特殊字符的字符串。我想打印它们,但不要打印重复的。
Input String s="&*$%) )_@*% &)((("
Ouput ="&*$%)_@("
答案 0 :(得分:1)
这里是C ++版本,您可以在其中使用bitset来跟踪已经看到的唯一字符。
#include <iostream>
#include <string>
#include <bitset>
bool IsSpecialChar(const unsigned char& c) {
// your treatment to decide if the character is "special"
return (c < 'a' || c > 'z')
&& (c < 'A' || c > 'Z')
&& (c < '0' || c > '9')
&& (c != ' ');
}
std::string StripDuplicates(const std::string& str) {
std::bitset<256> alreadySeen;
std::string result;
for (const unsigned char& c : str) {
if (!alreadySeen[c] && IsSpecialChar(c)) {
result += c;
alreadySeen[c] = true;
}
}
return result;
}
int main(int argc, char * argv[]) {
std::string testString = "aazrr554AZEZAAZZ&*$%) )_@*% &)(((";
std::string result = StripDuplicates(testString);
std::cout << result << std::endl;
}
编辑:如果要过滤要保留的字符是否为“特殊字符”,则可能要在将“ c”附加到“结果”之前添加该检查。我编辑了代码以反映这一点。
答案 1 :(得分:0)
首先,在Java中,我们需要将这些字符添加到HashSet(HashSet是仅保留唯一值的列表),然后我们将使用字符串生成器使用这些唯一值创建字符串,就是这样,您可以自己检查代码< / p>
import java.util.*;
class Main {
public static void main(String[] args) {
String ss = "&*$%) )_@*% &)(((";
Set<Character> set = new HashSet<>();
StringBuilder output
= new StringBuilder();
for (int i = 0; i < ss.length(); i++) {
set.add(ss.charAt(i));
}
for (Character c : set) {
output.append(c);
}
System.out.println(output);
}
}
答案 2 :(得分:0)
从Redgis那里获取答案,并使用std::copy_if
算法功能:
#include <iostream>
#include <string>
#include <bitset>
#include <iterator>
#include <algorithm>
std::string StripDuplicates(const std::string& str) {
std::bitset<256> alreadySeen;
std::string result;
std::copy_if(str.begin(), str.end(), std::back_inserter(result),
[&](char ch)
{bool seen = alreadySeen[static_cast<unsigned char>(ch)];
alreadySeen.set(ch); return !seen;});
return result;
}
int main(int argc, char * argv[]) {
std::string testString = "&*$%) )_@*% &)(((";
std::string result = StripDuplicates(testString);
std::cout << result << std::endl;
}
输出:
&*$%) _@(