首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问一个数字母个数的C++编程题目

2012-03-13 
请教一个数字母个数的C++编程题目昨天碰到这样一个问题.要求用一个对象数组来找出在一个文本中每一个字母

请教一个数字母个数的C++编程题目
昨天碰到这样一个问题.要求用一个对象数组来找出在一个文本中每一个字母的百分数,只要数字母的个数其他的不需要数.得到的百分数结果用冒泡法降序排列.最大的百分数输出长度是50,并保留2个有效数字.
输出结果如下(一个例子):
Number   of   letter:   400
-----------------------------------------
e:   **************************************(19.23%)
n:   ********************(9.70%)
i:   *******************(9.43%)
r:   ******************(6.48%)
...
x:   0%
以下是Counter类的定义(是个人意见不知道有没有更好的)
class   Counter
{
        int   count;
        static   int   total;
public:
        Counter(){count=0;}
        ~Counter(){}
        void   inc(char);   不会写有问题
        int   get_count(){return   count}
        static   int   get_total(){return   total;}
        double   get_percent(){return   ((double)count/(double)total)*100;}
  如果有需要可以在加函数
     
}
int   Counter::total=0;

有谁能帮帮我
第一个问题是怎么写void   inc(),我想设置
void   Counter::inc(char   letter)
{
if(letter   > = 'A '&&   letter   <= 'Z ')
{
count++;
total++;
}
else   if(letter   > = 'a '&&   letter   <= 'z ')
{
count++;
total++;
     }
}

另一个问题是如何写主函数
const   int   MAX=26;
void   main(){
  Counter   Count_26_letter[MAX];
???

[解决办法]
#include "string.h "
#include "stdio.h "
class Counter
{
struct res
{
char c;
int count;
} m_count[52];
int m_total;
public:
Counter()
{
m_total = 0;
memset(m_count, 0 , sizeof(res)*52);
int i;
for(i = 0; i < 26; ++i)
{
m_count[i].c = 'A ' + i;
}
for(i = 26; i < 52; ++i)
{
m_count[i].c = 'a ' + i - 26;
}
}
~Counter(){}
void count(char* str)
{
int len = strlen(str);
for(int i = 0; i < len; ++i)
{
if(str[i] > = 'A '&& str[i] <= 'Z ')
{
m_count[str[i]- 'A '].count++;
m_total++;
}
else if(str[i] > = 'a '&& str[i] <= 'z ')
{
m_count[str[i]- 'a '+26].count++;
m_total++;
}
}
//进行排序
sort()
}

void sort()
{
//冒泡排序就不写了
}

void print()
{
printf( "Number of letter: %d\n ", m_total);
for(int i = 0; i < 52; ++i)
{
if(m_count[i].count == 0)
continue;
printf( "%c: ", m_count[i].c);
float present = float(m_count[i].count)/m_total*100;
for(int j = 0; j < present; ++j)
{
printf( "* ");
}
printf( "(%02f%%)\n ", present);
}
}
};

int main()
{
Counter a;
a.count( "asfgajkgfeugksufjkdsagurgafkasg ");
a.print();
return 1;
}

热点排行