隐式转换
- 隐式转换是指编译器在没有显式提示的情况下,自动将一种数据类型转换为另一种数据类型。这种转换是语言规范允许的,并且通常是为了让代码更简洁、更自然。隐式转换的类型字符类型( 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;
}