标签:
题目:简单错误记录
题目描述:
开发一个简单的错误记录功能模块,能够记录出错的代码所在的文件名称和行号。
处理:
1、记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条错误,错误计数增加;
2、超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、输入的文件可能带路径,记录文件名称不能带路径
题目分析:
①题目首先比较每次错误,如果相同我们只需要记录一次错误,但是错误计数要加1;所以我们想到要把每次错误储存在一个二维数组中,这个数组为8行17列store[8][17]
②我们要记录错误计数,因为每个错误可能次数不一样,所以我们也定义一个一维数组counts[i]
③超过16个字符的文件名称,我们只记录文件的最后有效16个字符,所以我们要区分开舒瑞虎的文件名称和行数,所以我们又需要定义一个一维数组保存错误所在行号rows[]
④检测文件名称的长度,我们需要从后往前数,检测/字符,这里需要注意C语言中转义字符用双右斜杠表示转义字符。
⑤我们还需要一个计较每次错误是不是相等,我们可以利用字符串中strcmp来比较,而且行也需要相等,如果是第一次输入时,我们就不需要比较。之后每输入一次都要和前面每一次进行比较。用循环解决
⑥如果不相等,我们就直接将字符串拷贝到store中,用字符串处理strcpy
⑦最后输出格式,由题意可以知道我们这里要输出前面所有的错误,所有我们要采用一个for循环,输出所有的错误。错误中包含store[],rows[],counts[]
学习笔记:
①充分利用数组来完成算法
如果有很多个字符串需要保存,我们需要用字符串数组,二维数组来保存,store[i]表示一个字符串
②充分利用字符串的功能strcpy拷贝和strcmp比较
③注意如果我们知道一个数组的初始地址的时候,我需要表示字符串后面的字符串我们可以这样表示&s[len - 1 -i]。学会这种表示方法
=============================================================================
参考代码:
//简单错误记录.cpp #include <iostream> #include <string> using namespace std; const int maxn = 1000; char s[maxn]; int main() { //初始化 char store[8][17] = {0}; int counts[8] = {0}; int rows[8] = {0}; int row,kase = 0; //输入 while(cin >> s >> row) { int len = strlen(s); int i; //只保留最后有效字符16个字符 for(i = 0;i < 16; i++) { if(s[len - 1 - i] == ‘\\‘) break; } //判断是不是相同 i--; int equal = 0; for(int j = 0;j < kase; j++) { if(strcmp(store[j],&s[len - 1 -i]) == 0 && row == rows[j]) { equal = 1; counts[j]++; break; } } //如果不相同 if(!equal) { strcpy(store[kase], &s[len - 1 -i]); rows[kase] = row; counts[kase]++; kase ++; } for(int j = 0; j < kase; j++) { cout << store[j] << " " << rows[j] << " " << counts[j] << endl; } } return 0; }
转自:http://m.blog.csdn.net/blog/to_xidianhph_youth_2010/37419629
看了好多实现错误记录功能的例子,这篇写的是最基础的。。大牛好厉害(我太菜了。。)。
标签:
原文地址:http://www.cnblogs.com/K2154952/p/4780819.html