天梯-这是字符串题
隐式转换
- 隐式转换是指编译器在没有显式提示的情况下,自动将一种数据类型转换为另一种数据类型。这种转换是语言规范允许的,并且通常是为了让代码更简洁、更自然。隐式转换的类型字符类型( char )可以隐式转换为其对应的ASCII码值( int 类型)。这是因为字符本质上是存储在内存中的整数值,而ASCII码表定义了字符与整数值之间的映射关系。
- 数组的下标必须是整数类型,不能直接使用字母作为数组的下标。在C++中,字符类型( char )可以隐式转换为其对应的ASCII码值( int 类型),即一个字符,在数组下标或数组访问中会被自动转换为其ASCII码值。因此可以通过这种方式间接用字符(实际是字母的ASCII码值)作为数组下标。
map用法
题解
本题有两种解法,h 可以使用普通数组来实现,也可以使用 map
普通数组
注意,h数组一定要先初始化,h 数组如果没有被初始化,这意味着它可能包含任意值。当你对 h[s[i]] 进行自增操作时,可能会得到错误的结果。
#include<bits/stdc++.h>
using namespace std;
int main(){string s;int h[123]={0};cin>>s;int w[123],ans=0;for(int i='a';i<='z';i++){cin>>w[i];}for(int i=0;i<s.size();i++){h[s[i]]++;ans+=w[s[i]];}for(int i='a';i<='z';i++){if(i=='z'){cout<<h[i];}else cout<<h[i]<<" ";}cout<<endl;cout<<ans<<endl;return 0;
}
map
#include<bits/stdc++.h>
using namespace std;
int main(){string s;map<char,int>h;cin>>s;int w[123],ans=0;for(int i='a';i<='z';i++){cin>>w[i];}for(int i=0;i<s.size();i++){h[s[i]]++;ans+=w[s[i]];}for(int i='a';i<='z';i++){if(i=='z'){cout<<h[i];}else cout<<h[i]<<" ";}cout<<endl;cout<<ans<<endl;return 0;
}