找出字符串中只出现一次的字符

sting类中的find和rfind方法,从给定字符串的第一个字符开始,find是从前往后找,rfind是从后往前找,如果最后找到的位置相同,那这个字符是唯一字符,如果位置不相同,这个字符是重复的。

#include
#include
using namespace std;

void find_once_char( string&s ) {
	for (size_t i = 0; i < s.size(); i++) {
		if (s.find(s[i]) == s.rfind(s[i])) {
			cout << s[i] << endl;
			break;
		}
		if (i == s.size() - 1) {
			cout << -1 << endl;
		}
	}
}
int main() {
	string s;
	while (getline(cin, s)) {
		find_once_char(s);
	}
	return 0;
}

思路2:一个字符串全部转化为ASCII码值可以看做一个都是正整数的整形数组
A:65 B:66 ……
a:97 b:98……
先统计每个字符出现的个数,保存在count数组中,然后从字符串的第一个字符开始,在count数组中找它当时存的值是不是1。

    int firstUniqChar(string s) {
	int count[256] = { 0 };
	for (auto e : s){
		   count[e]++;
		}
	for (size_t i = 0; i < s.size(); ++i){
		if (count[s[i]] == 1){
			   return i;
			}
	}
	return -1;
    }

你可能感兴趣的:(C++学习,c++)