统计输入的字符串中字母的频率 (vc++)

发布网友 发布时间:2024-10-18 21:33

我来回答

4个回答

热心网友 时间:6分钟前

#include<stdio.h>

#define MAX 100 /*定义数组长度*/

char aa[MAX]; /*用于存放字符串*/
int a[50]; /*用于存放每个字母出现的次数*/

/*函数功能:统计给定字母的个数*/
int Tongji(char cc)
{
int i,count=0; /*计数器置0*/
char *p; /*定义数组指针*/
p=aa; /*指针P指向数组第一个元素*/
for(i=0;aa[i] !='\0' ;i++)
if(*(p+i)==cc)
count=count+1;
return count;
}

main()
{
int i,max=0,min=MAX;
printf("请输入字母:");
gets(aa); /*将输入的字母存入数组*/
for(i=0;i<26;i++) /*依次统计a-z的个数*/
{
a[i]=Tongji(i+97);
printf("字母%c出现了%d次.\n",i+97,a[i]);
}
for(i=26;i<52;i++) /*依次统计A-Z的个数*/
{
a[i]=Tongji(i+39);
printf("字母%c出现了%d次.\n",i+39,a[i]);
}
a[46]='\0';

for(i=0;i<52;i++) /* 以下求出现最多次数的字母*/
if(a[i]>max)
max=a[i];

for(i=0;i<26;i++)
{
if(a[i]==max)
printf("%c出现的最多,次数有%d次。\n",i+97,a[i]);
}
for(i=26;i<52;i++)
{
if(a[i]==max)
printf("%c出现的最多,次数有%d次。\n",i+39,a[i]);
}

for(i=0;i<52;i++) /* 以下求出现最少次数的字母*/
if(a[i]<min)
min=a[i];

for(i=0;i<26;i++)
{
if(a[i]==min)
printf("%c出现的最少,次数有%d次。\n",i+97,a[i]);
}
for(i=26;i<52;i++)
{
if(a[i]==min)
printf("%c出现的最少,次数有%d次。\n",i+39,a[i]);
}
}

写出来交流一下

热心网友 时间:3分钟前

现在没时间了,待会帮你。。
#include<iostream.h>
#include<string.h>
class string1
{
private:
char *str;
int size;
int maxsize;
public:
string1(){str=NULL;size=0;maxsize=0;}
void out(string1 & s);
friend ostream& operator<<(ostream &ostr,const string1 & s);
friend istream& operator>>(istream &istr,string1 & s);
};

void string1::out(string1 &s)
{
int i,k;
for(i=0;i<s.size;i++)
{
int m=1;
for(k=i+1;k<s.size;k++)
{
if(s.str[i]==s.str[k])
{
for(int n=k;n<s.size;n++)
{
s.str[n]=s.str[n+1];
}
s.size--;
s.maxsize--;
m++;
}
}
cout<<s.str[i]<<"的个数:"<<m<<endl;
}
}

ostream & operator<<(ostream &ostr,const string1 &s)
{
cout<<"s.size="<<s.size<<endl;
cout<<"s.maxsize="<<s.maxsize<<endl;
cout<<"s.str="<<s.str<<endl;
return ostr;
}

istream& operator>>(istream &istr,string1 &s)
{
delete []s.str;
cout<<"输入字符串的元素个数:";
cin>>s.size;
s.maxsize=s.size+1;
s.str=new char[s.maxsize];
cout<<"输入字符串:";
for(int i=0;i<s.size;i++)
cin>>s.str[i];
s.str[s.size]=NULL;
return istr;
}

void main()
{
string1 s;
cin>>s;
cout<<s;
s.out(s);
cin.ignore(cin.rdbuf()->in_avail()+1);
}

热心网友 时间:2分钟前

#include<iostream>
#include<stdio.h>
using namespace std;
#define M 100
void F(const char *p)
{
int letter,digit,space,others;
letter=digit=space=others=0;
for(p;*p!=0;p++)
{
if(*p<='z'&&*p>='a'||*p>='A'&&*p<='Z')
letter++;
else if(*p>='0'&&*p<='9')
digit++;
else if(*p==' ')
space++;
else
others++;
}
cout<<"字母有"<<letter<<"个。"<<endl;
cout<<"数字有"<<digit<<"个。"<<endl;
cout<<"空格有"<<space<<"个。"<<endl;
cout<<"其他字符有"<<others<<"个。"<<endl;
}
void main()
{
char a[M],*p;
p=a;
cout<<"Please input a string:"<<endl;
gets(a);
F(p);
}

热心网友 时间:3分钟前

//我也来写一个超简洁版的
//是否能理解是你的事了
//理论上可以处理无限长的字符,不限定于100个字符
//因为程序根本就没有存储字符而只是统计
//最后统计时考虑到相同频率的字符情况
//程序已通过VC2003.Net调试

#include <iostream>
using namespace std;
int main()
{
static int total[256];
unsigned int n = 0,max = 0,min = 65535;
char ch;
while(cin.get(ch) && ch!='#')
total[(int)ch]++,n++;
for(int i=0;i<256;i++)
{
if(total[i]>max)
max = total[i];
if(total[i]&&total[i]<min)
min = total[i];
}
for(int i=0;i<256;i++)
if(total[i]==max||total[i]==min)
cout<<char(i)<<'\t'<<total[i]<<'\t'
<<(float)total[i]*100/n<<"\%\n";
system("PAUSE");
return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com