c++ 找到字符串中第一个出现重复的字符和第一个不重复的字符
我们可以使用map容器来记录字符串中字符和它对应的次数
map容器第一个参数为键(key),第二个参数为值(value)
定义map<char,int>,char:表示字符 int:字符出现的次数
话不多说,直接上代码啦!
①找到字符串中第一个出现重复的字符
(1)第一种方法,使用map
#include <iostream>
#include <map>
#include <string>
using namespace std;
void firstrepeatchar(string s)
{
int len = s.length(); //字符串长度
map<char, int> str; //char:字符 int:字符出现的次数,map不初始化时,value为int型时,默认为0
for (int i = 0; i < len; i++)
{
str[s[i]]++; //字符出现的次数,s[i]为键,str[s[i]]++表示s[i]出现的次数
}
for (int i = 0; i < len; i++)
{
if (str[s[i]] > 1)
{
cout << s[i] << endl;
break; //找到一个重复字符,跳出循环。
}
}
}
int main()
{
string str;
while (getline(cin,str))
{
firstrepeatchar(str);
}
system("pause");
return 0;
}
(2)第2种方法,不使用map
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
string str;
int len; //字符串长度
int index; //索引
while (getline(cin,str))
{
len = str.length();
for (int i = 0; i < len; i++)
{
index = str.find(str[i], i + 1); //与str[i]相等的第一个字符的索引
if (index != str.npos) //表示索引存在
{
cout << str[i] << endl;
//i = len;
break;
}
}
}
system("pause");
return 0;
}
测试结果
②找到字符串中第一个出现不重复的字符
(1)第一种方法,使用map
#include <iostream>
#include <string>
#include <map>
using namespace std;
void findfirstnorepeat(string s)
{
int len = s.length();
map<char, int> str; //char:字符 int:字符出现的次数
int count = 0;
for (int i = 0; i < len; i++)
{
str[s[i]]++; //字符出现的次数
}
for (int i = 0; i < len; i++)
{
if (str[s[i]] == 1)
{
cout << s[i] << endl;
break;
}
}
}
int main()
{
string str;
while (getline(cin,str))
{
findfirstnorepeat(str);
}
system("pause");
return 0;
}
(2)第2种方法,不使用map
#include <iostream>
#include <string>
#include <map>
using namespace std;
void findfirstnorepeat(string s)
{
int a[128] = { 0 }; //初始化为0
int len = s.length(); //字符串长度
for (int i = 0; i < len; i++)
{
a[s[i]]++; //字符出现次数
}
for (int i = 0; i < len; i++)
{
if (a[s[i]] == 1)
{
cout << s[i] << endl;
break;
}
}
}
int main()
{
string str;
while (getline(cin,str))
{
findfirstnorepeat(str);
}
system("pause");
return 0;
}
测试结果
希望能帮到大家!!!😊