最近我發現了一些我試圖理解的代碼。
#include<stdio.h>
#include<string.h>
int main()
{
int i;
int arr[256]={0};
char str[60]=" test test test TEST TEST TEST";
for(i=0;i<strlen(str);i )
{
if(!((str[i]==' ') ||(str[i]==',') ))
arr[str[i]] ;
}
printf("Repeated character in a string are:\n");
for(i=0;i<256;i )
{
if(arr[i]>1)
{
printf("%c occurs %d times\n",(char)(i),arr[i]);
}
}
}
輸出是:
Repeated character in a string are:
E occurs 3 times
S occurs 3 times
T occurs 6 times
e occurs 3 times
s occurs 3 times
t occurs 6 times
我的問題是關于這行代碼:arr[str[i]] ;.
這如何設法存盤使用字符的總次數?關于arr[str[i]] 每個回圈,計算機記憶體中發生了什么?
此致,
uj5u.com熱心網友回復:
arr[str[i]] ;
可以換成
char c = str[i];
arr[c] ;
C 是字串中的字符。每個字符只是計算機的數字。'a' 可以等于 0 或 12,這都是關于約定的。這里的當前約定被命名為 ascii。例如,字符 'a' 是 97,字符 'A' 在 ascii 中是 65。這只是人類的約定。
Arr 是一個初始化為 0 的陣列。
假設這里的 c 包含字母“a”,所以它包含 97。
arr[c] ;簡單地增加陣列的第 98 個值
uj5u.com熱心網友回復:
arr 只是一個計數器陣列,其中每個計數器對應于令牌表中的一個符號代碼。
一個字符通常可以容納最多 127 的正值,但在某些情況下最多可達 255。因此,將 的大小arr設定為 256,以涵蓋所有情況。可以說有點浪費,因為代碼 0 到 31 通常是不可列印的字符。
由于陣列在開始時設定為全零,因此每個計數器都從那里開始。
例如'A',當程式遇到例如它沒有看到字母而是符號代碼時,例如 ASCII 65。然后它將索引 65 上的計數器增加 1。
因此,arr[str[i]] 將意味著:以信里面str[i],這實際上只是一個數字,如65,再增加1陣列索引65。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338867.html
上一篇:為什么我不能向結構中添加字串?
