这段代码中的arr[s[i]-'a']有什么用,为什么我们用"a"减去所有字符?
What is the use arr[s[i]-'a'] in this code and why we subtracting all characters with 'a'?
有人可以解释一下下面代码中++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;
}
这是将字母转换为其相应数值的常用方法,从 0(对于"a"(到 25(对于"z"(。由于"a"等于"a",因此'a'-'a'
将为零。由于"b"比"a"大一,'b'-'a'
将是一。等等。
它使用一行来计算单词中字母的出现次数。让我们看一下这个细分:
first[a[c]-'a']++;
a[c] - 'a' 得到字母字符的数字表示,所以想象一下,如果 a[c] 是 'b',我们会得到数字 1。
first[a[c] - 'a'] 首先在字母的位置访问数组。
首先[a[c] - 'a']++是该位置的数字递增。
因此,如果您遇到"b",您的列表将如下所示:
"{0, 1, 0, ...">
你的代码计算字符串中的小字母。用于限制仅使用小写字母 -'a'。那 26 个字母只存储在向量中。
相关文章:
- 在java中解决这段代码时面临循环中的问题
- 我是如何在这段代码中出现分段错误的
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 为什么这段代码不起作用,我该如何解决?
- 为什么这段代码给我错误? 有没有自错?
- 有人可以解释一下这段代码如何能够反转字符串
- 可能我知道为什么这段代码没有给出任何输出吗?
- 这段代码的最后一行在做什么?
- 我不知道为什么这段代码会让核心被转储?
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 有人可以向我解释一下这段代码的作用吗?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 为什么这段代码会导致无限循环?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 如何为一段代码启用 -permissive
- 谁能告诉我为什么这段代码没有产生正确的输出?
- 我想反转我的阵列.为什么这段代码给出垃圾值?
- 使用Qt Creator在调试模式下编译一段代码
- 有没有办法使这段代码更快?
- 这段代码中的arr[s[i]-'a']有什么用,为什么我们用"a"减去所有字符?