C++ arr[s[i]';a';]在这段代码中的用途是什么?为什么我们用';减去所有字符;a';?
有人能解释一下C++ arr[s[i]';a';]在这段代码中的用途是什么?为什么我们用';减去所有字符;a';?,c++,C++,有人能解释一下++arr[s[i]-'a'的意思吗下面代码中的逻辑。为什么我们要用“a”减去每个字符 #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main(){ int n; cin >> n; for(i
++arr[s[i]-'a'的意思吗代码>下面代码中的逻辑。为什么我们要用“a”减去每个字符
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
for(int a0 = 0; a0 < n; a0++){
string s;
cin >> s;
int c=0;
vector <int> arr(26,0);
for(int i=0;i<s.length();i++){
++arr[s[i]-'a'];
}
for(int j=0;j<26;j++){
if(arr[j]!=0)
c++;
}
cout<<c<<endl;
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int n;
cin>>n;
对于(int a0=0;a0>s;
int c=0;
向量arr(26,0);
对于(int i=0;i这是一种将字母从0(表示“a”)转换为25(表示“z”)的相应数值的常用方法。由于“a”等于“a”,因此'a'-'a'
将为零。由于“b”比“a”大一,因此'b'-'a'
将为一。依此类推。您的代码计算字符串中的小写字母。为了仅限制小写字母,将使用-a。这26个字母仅存储在向量中。它使用一行程序来计算字符串中出现的字母数f一个单词中的一个字母。让我们看看这个分解:
第一个[a[c]-'a']++
a[c]-“a”是字母字符的数字表示形式,因此想象一下,如果a[c]是“b”,我们将得到数字1
第一个[a[c]-“a']首先在字母的位置访问数组
第一个[a[c]-'a']++是增加该位置的数字
因此,如果您遇到“b”,您的列表将如下所示:
“{0,1,0,…”你能说得更具体些吗?那代码应该做什么?关于-“a”
你知道ASCII字符表吗?在数值计算中使用字符时,它们是否与ASCII值不符(例如,“a”=97)它们可能是。这取决于平台。你真正得到保证的是a
不会为零,而且a
到z
将是顺序的。'0'
-'9'
是顺序的保证,而'a'
-'z'
或'a'
-'z'
则不是顺序的保证。请参见示例E