gpt4 book ai didi

c++ - STL映射查找第一个不可重复的字符

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:20 25 4
gpt4 key购买 nike

我编写了一个小的 C++ 程序来计算字母表。我正在使用 STL map ,

有趣的是,我没有得到输入中显示的列表。例如对于单词 TESTER,我的程序应该给出

T  2
E 2
S 1
R 1

但它的给予,

E       2
R 1
S 1
T 2

改变字母的位置,

我想要输入中出现的字母的 o/p。如果我遗漏了什么,请帮助我。这是我的代码

#include<iostream>
#include<map>

using namespace std;

int main()
{
char *str = "TESTER";
map<char,int> checkmap;
map<char,int>::iterator p;
int i;
while( *str != '\0' )
{
p = checkmap.find(*str);
i = p->second;
if(p == checkmap.end())
{
checkmap.insert(std::make_pair(*str,++i));
}
else
{
p->second = ++(p->second);
}
str++;
}
for(p=checkmap.begin(); p!=checkmap.end(); p++)
{
/*if(p->second == 1)
{
cout<<(*p).first<<endl;
}*/
cout<<p->first<<"\t"<<p->second<<endl;
}

return 0;
}

最佳答案

这里展示了如何完成的方法

#include <iostream>
#include <map>
#include <cstring>

int main()
{
const char *str = "TESTER";

auto order = [&]( char c1, char c2 )
{
return ( std::strchr( str, c1 ) < std::strchr( str, c2 ) );
};

std::map<char, int, decltype( order )> m( order );

for ( const char *p = str; *p; ++p ) ++m[*p];

for ( const auto &p : m ) std::cout << p.first << ' ' << p.second << std::endl;
std::cout << std::endl;

return 0;
}

程序输出为

T 2
E 2
S 1
R 1

关于c++ - STL映射查找第一个不可重复的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30503595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com