第15周报告2
实验目的:学会操作字符数组
实验内容:完成对字符数组的操作
/* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:函数的递归
* 作 者: 2011级 114-3 张宗佳
* 完成日期:2011年12月4日
* 版 本 号: vc.1
* 对任务及求解方法的描述部分
* 输入描述:要处理的字符串在程序中通过赋初值完成
* 问题描述:求出字符数组中字符的个数及计算句子中各字符出现的频数
* 程序输出:字符数组中字符的个数和句子中各字符出现的频数
*/
#include<iostream>
using namespace std;
//函数声明
int length(char str[]);
void output_frequency(char str[]);
int main(void) //不要对main函数有任何改动
{
char str[] = "he threw three free throws";
cout << "要处理的字符串为:" << str << endl;
cout << "字符串长度为:" << length(str) << endl;
cout << "字符串中各字符出现的频数为:";
output_frequency(str);
cout << endl;
return 0;
}
int length(char str[])
{
int i = 1;
do
{
i++;
}while(str[i] != '\0');
return i;
}
void output_frequency(char str[])
{
int i = 0, f, n, j;
char c;
//l = length(str);
//for(i = 0; i <= length(str); i++)
while(i < length(str))
{
while(i >= 1)
{
do //这里的do while循环是判断再此字母出现之前有没有重复的,如果重复便不再统计
{
j = (i - 1);
while(j >= 0)
{
if(str[j] != str[i])
{
j--;
}
else
{
i++;
break;
}
}
}while(j > 0);
if(j < 0) break;
}
c = str[i];
n = 0;
for (f = i;f < length(str); f++) //这里的循环用来判断此字母出现的次数
{
if (c == str[f])
{
n = n + 1;
}
}
cout << c << "-" << n << " ";
i++;
}
return ;
}
经验积累:
1.本程序中运用了字符串数组,调用了两个函数,字符串数组要定义为char
2.计算字符串数组的长度,只要让str[j]不等于'\0',再定义一个累加变量就可以了
3.第二个计算频数的函数要注意避免重复计算,要判断此字母是否是第一次出现,利用循环判断,再设一个变量,判断前i-1个数内是否有相等的,如果没有,说明是第一次出现,可以计算
上机感言:
这个任务有难度啊..主要是第二个函数的定义,需要好多循环,容易搞晕,在不断调试之后,终于发现了错误,其实主要就是各个循环的嵌套,把这一点弄明白了,就好多了...终于舒了口气..