當前位置:首頁 » 編程語言 » c語言求字頻

c語言求字頻

發布時間: 2022-06-14 03:58:35

『壹』 c語言 統計字母頻率

看我旁邊做的註解

cnt(s,array); /*調用子函數cnt,並傳給參數s, array。s是字元數組,相當於字元串指針;array是數組好理解*/
for(i=0;i<26;i++)
printf("%d",array[i]); /* for循環 依次輸出26個字母出現的次數。這里%d後面加個空格或逗號分隔才好 */
printf("\n");

子函數
void cnt(char *p,int arr[]) /* 第一個參數是字元串指針,第二個參數是整型數組 */
{
int i;
for(i=0;i<26;i++) /*數組初始化*/
arr[i]=0; /* 26個字母的個數全初始設置為0 */
while(*p) /* 循環,*p表示取指針p所指的字元,如果為0則表示字元串結束,退出循環 */
{
if(*p>='a'&&*p<='z') /*數組元素判斷*/ /* 判斷是否是a到z的字母,若是才統計*/
arr[*p-'a']++; /*p與字母a的差值剛好就是數組arr下標*/ /* 字母a對應數組的下標是0, b是1,依次類推 */
p++; /* 指針加1, 指向後面一個字元 */
}
}
這樣可以么?

『貳』 c語言 求在輸入的字元序列中統計各個小寫字母出現的頻率。

#include "stdio.h"
main()
{ int n[26]={0},i,j;
char m[200];
gets(m);
for(i=0;m[i]!='\0';i++)
if(m[i]>=97 && m[i]<=122)
n[m[i]-97]++; /*取得每個小寫字母出現的個數*/
for(j=0;j<26;j++)
if(n[j]!=0)
printf("%c is %d/%d\n",97+j,n[j],i);
}
或者用下面的程序,更好懂些。

#include "stdio.h"
main()
{ int n[26]={0},i,j;
char m[200];
gets(m);
for(i=0;m[i]!='\0';i++)
if(m[i]>=97 && m[i]<=122)
{switch(m[i])
{
case 'a': n[0]+=1;break;
case 'b': n[1]+=1;break;
case 'c': n[2]+=1;break;
case 'd': n[3]+=1;break;
case 'e': n[4]+=1;break;
case 'f': n[5]+=1;break;
case 'g': n[6]+=1;break;
case 'h': n[7]+=1;break;
case 'i': n[8]+=1;break;
case 'j': n[9]+=1;break;
case 'k': n[10]+=1;break;
case 'l': n[11]+=1;break;
case 'm': n[12]+=1;break;
case 'n': n[13]+=1;break;
case 'o': n[14]+=1;break;
case 'p': n[15]+=1;break;
case 'q': n[16]+=1;break;
case 'r': n[17]+=1;break;
case 's': n[18]+=1;break;
case 't': n[19]+=1;break;
case 'u': n[20]+=1;break;
case 'v': n[21]+=1;break;
case 'w': n[22]+=1;break;
case 'x': n[23]+=1;break;
case 'y': n[24]+=1;break;
case 'z': n[25]+=1;break;
}
}
for(j=0;j<26;j++)
if(n[j]!=0)
printf("%c is %d / %d\n", 97+j, n[j], i);
}

『叄』 C語言編程:輸入一字元串,統計字元串中各個字元出現的頻率

可以先排序,在遍歷統計。

#include<stdio.h>
#include<string.h>
//升序字元串src,然後返回
char*sort(char*src)
{
chartem,len=strlen(src);
for(inti=0;src[i];i++)
{
for(intj=0;j<len-i-1;j++)
if(src[j]>src[j+1])
{
tem=src[j];
src[j]=src[j+1];
src[j+1]=tem;
}
}
returnsrc;
}

intmain()
{
charstr[1000],ch;
inti=0,cnt;
printf("inputastring:");
gets(str);
sort(str);//排序
ch=str[0];
cnt=1;
for(i=1;str[i];i++)//遍歷統計
{
if(str[i]!=ch)
{
if(cnt)
printf("%chas%d. ",ch,cnt);
ch=str[i];
cnt=1;
}
else
cnt++;
}
if(cnt)
printf("%chas%d. ",ch,cnt);
return0;
}

『肆』 從一個C語言源程序文件中 統計出該C程序中使用的關鍵字及其頻率

以下程序已經編譯運行確認,需要將C語言源程序文件保存為a.c:

#include <stdio.h>
#include <string.h>

#define Key_Num 32 //C語言共有32個關鍵字
#define Len_Min 2 //最短的長度為2
#define Len_Max 8 //最長的長度為8
const char Key[Key_Num][Len_Max+1]={
"auto","break","case","char","const","continue","default","do","double",
"else","enum","extern","float","for","goto","if","int","long","register",
"return","short","signed","sizeof","static","struct","switch","typedef",
"union","unsigned","void","volatile","while"
};

int count[Key_Num];
char input[Len_Max+1];

void CheckKeyWord(){
int i,result;
for(i=0;i<Key_Num;i++){
result=strcmp(input,Key[i]);
if(result==0){
count[i]++;
break;
}
if(result<0)
break;
}
}

int IsKeyLetter(char c){
return c>='a' && c<='z';
}
int IsOtherLetter(char c){
return c>='A' && c<='Z' ||
c>='0' && c<='9' || c=='_';
}

enum MY_STATE{
INVAILD,//初始時
IN_QUOTE,//引號內
IN_QUOTE_TRANS,//引號內讀到轉義符
IN_WORD,//有可能是關鍵詞
NOT_KEY,//不是關鍵詞
COMMENT_1,//第一個注釋符(/)
COMMENT_LINE,//行注釋
COMMENT_BLOCK,//塊注釋
COMMENT_BLOCK_1//塊注釋內讀到'*'
};

int main(){
FILE *fi;
int i;
enum MY_STATE state;

fi=fopen("a.c","r");
if(fi==NULL) return 1;

i=0;
state=INVAILD;
memset(count,0,sizeof(count));

while(fscanf(fi,"%c",&input[i])==1){
switch(state){
case INVAILD:
if(IsKeyLetter(input[i])){
state=IN_WORD;
i++;
}
else if(IsOtherLetter(input[i]))
state=NOT_KEY;
else if(input[i]=='\"')
state=IN_QUOTE;
else if(input[i]=='/')
state=COMMENT_1;
break;

case IN_QUOTE:
if(input[i]=='\\')
state=IN_QUOTE_TRANS;
else if(input[i]=='\n')//這里漏引號,編譯錯誤。
state=INVAILD;
break;

case IN_QUOTE_TRANS:
if(input[i]=='\n')//這里漏引號,編譯錯誤。
state=INVAILD;
else
state=IN_QUOTE;
break;

case IN_WORD:
if(IsKeyLetter(input[i])){
if(i<Len_Max)
i++;
else{
i=0;
state=NOT_KEY;
}
}
else if(IsOtherLetter(input[i])){
i=0;
state=NOT_KEY;
}
else{
input[i]='\0';
CheckKeyWord();
i=0;
if(input[i]=='\"')
state=IN_QUOTE;
else if(input[i]=='/')
state=COMMENT_1;
else
state=INVAILD;
}
break;

case NOT_KEY:
if(input[i]=='\"')
state=IN_QUOTE;
else if(input[i]=='/')
state=COMMENT_1;
else if(!IsKeyLetter(input[i]) && !IsOtherLetter(input[i]))
state=INVAILD;
break;

case COMMENT_1:
if(input[i]=='/')
state=COMMENT_LINE;
else if(input[i]=='*')
state=COMMENT_BLOCK;
else if(IsKeyLetter(input[i])){
state=IN_WORD;
i++;
}
else if(IsOtherLetter(input[i]))
state=NOT_KEY;
else
state=INVAILD;
break;

case COMMENT_LINE:
if(input[i]=='\n')
state=INVAILD;
break;

case COMMENT_BLOCK:
if(input[i]=='*')
state=COMMENT_BLOCK_1;
break;

case COMMENT_BLOCK_1:
if(input[i]=='/')
state=INVAILD;
else
state=COMMENT_BLOCK;
break;
}
}
fclose(fi);

fi=fopen("keyword.txt","w");
if(fi==NULL) return 1;
for(i=0;i<Key_Num;i++)
fprintf(fi,"%s: %d\n",Key[i],count[i]);
fclose(fi);

return 0;
}

『伍』 字母頻率統計-C語言

1、char a2[][26]={0};

按照你這種寫法 這個數組只有一行,也就是等效於char a2[1][26]={0};

所以當出現超過一個字元的時候 調用越界,導致崩潰。

如果你准備用二維數組的話,那麼大小需要動態分配。

但實際上,沒必要用數組,直接輸出就好了。

2、 輸入沒有說以.結束,而是說以ctrl+z結束。

改了一版代碼,你看看:

#include<stdio.h>
intmain()
{
intc;
inta[26]={0};
inti=0,j=0,max;

while((c=getchar())!=EOF)
{
if(c>='a'&&c<='z')
a[c-'a']++;
}//用a[0]大小表示字母a出現次數,其他字母分別用a[1],a[2]…a[25]表示。

for(i=1,max=a[0];i<26;i++)
{
if(a[i]>max)
max=a[i];
}
for(i=max;i>0;i--)
{
for(j=0;j<26;j++)
{
if(a[j]>=i)putchar('*');
elseputchar('');
}
putchar(' ');
}
printf("abcdefghijklmnopqrstuvwxyz ");
return0;
}

『陸』 用C語言統計字母的使用頻率

分怎麼少要求這么多,我也簡單點回答: 寫出了代碼還是要給你解釋 ..
分析:1.定義:str[200]裝字元串,s[26]裝26個字母對應出現的頻率,

根據你的要求:
(根據三的分析,主要問題在於:)內容
*p=str n=0; 由於只有英文字母數組中,所以:
if('a'<=*p<='z')while(*p){s[*p-'a']++;p++} /*對於s[*p-'a']++;解釋一下:if里說明了是 小寫字母,所以*p-'a'就是對應的acs2碼相減, 得出的數也就是字母a後面的數..*/
if()就把上面小寫改成大寫就行 //這里A與a都統計在s[0]里 ..類推..

這樣出現的次數就統計在s[26]里了 排序會撒?常用冒泡法 ..
創新要求: 就是文件那章內容 讀寫而已 字元串不是靠手輸入str[]中...fgets
是否可以解決您的問題?

『柒』 C語言顯示一段字元串中每個字元出現的頻率

每個字元出現的次數除以總共字元數即為出現的頻率,頻率具體可以用百分數或純小數表示均可,可以人為約定。

『捌』 急求C語言編寫的漢字字詞頻率統計系統

你好!
這個程序有點麻煩,要費些時間,程序什麼時間要,私,信,說,明,一,下

『玖』 c語言 求頻率的問題 !

#include <stdio.h>
#include <string.h>
#include <cstdlib>
//以上是頭文件。
int main(void)
//創建主函數
char s[100]={0}; //字元 s取100個(s1.s2......s100)賦值0域
int freq[256]={0}; //設freq取256個(freq1.......freq256)賦值0域
int i;//設i
printf("請輸入:"); //用戶鍵入值
gets(s); //得值s
for(i=0;i<strlen(s);i++) //循環i賦值0且i小於stren(s)且i後置遞增
freq[s[i]]++; //freq取s在i中取且後置遞增;
for(i='a';i<='z';i++); //循環i賦值"a"且i小於"z"且i後置遞增;
printf("%c: %d\n", i, freq[i]); //機器自動輸入變數c、d\n、i以及freqi中取;
system("pause"); //系統暫停
return 0; //返回0
} //待續之後程序。

『拾』 c語言,統計字母頻率,看下我編的哪裡有問題

【1】int b[26]而不是int b[25]
【2】 a[i]=+32; //應該是a[i] += 32
【3】void paixv(int b[]){ b[26]=0;b[27]=0; //這個 b[26]=0;b[27]=0;沒用,而且是錯的
【4】另外不要寫32,97這些,盡量用'a' - 'A'這樣表示
【5】number函數很不好,可以這么實現
void number(char a[],int b[])
{
int i;
for(i=0; i<26; i++)
++b[a[i]-'a'];
}

熱點內容
收縮資料庫的影響 發布:2024-05-03 10:27:24 瀏覽:743
python同步文件 發布:2024-05-03 10:27:19 瀏覽:782
磁碟不能存儲 發布:2024-05-03 10:27:14 瀏覽:52
手機照片存儲文件夾 發布:2024-05-03 09:48:20 瀏覽:182
建設銀行的密碼是什麼 發布:2024-05-03 09:42:45 瀏覽:360
上傳網頁用什麼伺服器 發布:2024-05-03 08:57:08 瀏覽:909
掌握ftp伺服器的配置與管理 發布:2024-05-03 08:06:58 瀏覽:766
伺服器搭建的函數 發布:2024-05-03 07:54:44 瀏覽:815
php包含數組 發布:2024-05-03 07:53:51 瀏覽:702
短暫記憶存儲信息是有限的 發布:2024-05-03 07:48:14 瀏覽:537