标签:over length print 包含 default 网上 勿喷 c++11 4行
一段统计字符数的代码及分析。
先贴代码:
#include<stdio.h> #include<string.h>//提供memset函数原型。 int main() { char S[80]; int C[26],length;//一段声明,即字符数组S,整型数组C,和整型length。 memset(C,0,sizeof(C));//将C清零,至于为什么不把字符数组清零,稍后有一段实验过程。 for(int i=0;i<=3;i++)//循环4次,读入4行字符串。 { gets(S);//获取字符串 length=strlen(S);//获取字符串长度 for(int j=0;j<length;j++)//循环length次,length=字符数 { if(S[j]>=‘A‘&&S[j]<=‘Z‘)//这一段代码很关键,判断语句,字符需要大写才能统计,即A~Z C[S[j]-‘A‘]++;//S[j]-‘A‘是S[j]在字母表中的序号,记住如果S[j]是数字,要写成S[j]-‘0‘。 } } for(int i=0;i<26;i++) printf("%d ",C[i]);//循环26次,输出统计完的数字。 return 0; }
以下是实验过程,将memset语句注释掉
结果是上图的一大串数字,来看看是为什么:
可以看到,在未初始化时,C数组是一些不定数字,因为它需要统计字符数,所以要清零。
if(S[j]>=‘A‘&&S[j]<=‘Z‘) C[S[j]-‘A‘]++;
这一段代码是该程序的精华,有人也许会写的长长一段来统计每一个字母的字符数,这里只要两个数组便解决了,这利用了计算机存储能力。
笔者后来在网上搜寻资料,发现有一段更有趣的代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int ff[26]; int main() { int i,j,n,maxn=0;char a[81]; for(i=0;i<4;i++) { gets(a); n=strlen(a); for(j=0;j<n;j++)if(a[j]>=‘A‘&&a[j]<=‘Z‘)ff[a[j]-‘A‘]++; } for(i=0;i<26;i++)maxn=max(maxn,ff[i]); for(i=maxn;i>0;i--){ for(j=0;j<26;j++) if(ff[j]>=i)printf("* ");else printf(" "); printf("\n");} for(i=0;i<26;i++)printf("%c ",i+‘A‘); }
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG. THIS IS AN EXAMPLE TO TEST FOR YOUR HISTOGRAM PROGRAM. HELLO!
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
这里有一个max函数,包含在c++标准库中头文件<algorithm>中,c++11标准:<algorithm>中min函数的原型:
default (1)
template <class T> const T& min (const T& a, const T& b); custom (2) template <class T, class Compare> const T& min (const T& a, const T& b, Compare comp); initializer list (3) template <class T> T min (initializer_list<T> il); template <class T, class Compare> T min (initializer_list<T> il, Compare comp);
通过他们来求最大值和最小值:
maxn=max(maxn,ff[i]);
分析了max函数,在接下来分析一下这代码中的精华:
if(ff[j]>=i)printf("* ");else printf(" ");
模拟,是可以输出的就输出*,否则跳过。
然后程序结果为:
PS:这些笔记是我闲来无事而写,目的不明确,也许是为了以后能够更好的理解或复习C语言,望大神勿喷!
2017-08-30
标签:over length print 包含 default 网上 勿喷 c++11 4行
原文地址:http://www.cnblogs.com/Lyewen/p/7455471.html