在这段代码中,如果我运行for循环来了解存储在数组c
中的元素,我会得到1 1 1 0 0 0 0 1 0 0
的输出。
输入为abc
。它为什么会提供1 1 1
而不是0 1 2 0 0 0 0 0 0
?
int c[26]={};
cin >> s;
len = s.length();
for(int i = 0 ; i < len ; i++ ){
c[s[i] - 'a'] ++ ;
}
答案 0 :(得分:1)
您的c
数组是读取的字符的直方图。你的输出是说你读了1&#39; a&#39;,&#39; b&#39;和1&#39; c&#39;。试试c
答案 1 :(得分:0)
您的代码基本上是在计算字符串中的字母数。计数存储在数组c
中,其中索引表示字母表中的字母索引。因此a
为0
,b
为1
,c
为2
,依此类推。
因此,对于abc
,正确的输入确实是1 1 1
,因为有1 a
,1 b
和1 {{1} }。您的c
代表一个包含1 0 1 2
和2 b
s的字符串。
答案 2 :(得分:0)
s[i] - 'a'
即返回0,1和2.但是
c[s[i] - 'a'] ++ ;
每次出现的C []总是增加1,在开始时全部用零填充。因此,您可以在输出中获得所有1。
尝试
c[s[i] - 'a'] = s[i] - 'a'