主题:[讨论]各位大虾们~~~帮帮忙啊~~~~十万火急~~
mikebinbin
[专家分:0] 发布于 2010-06-28 20:21:00
编写一个程序TypeF.cpp模仿Windows命令type的功能显示指定文件的内容。要求作如下改进:
 命令行的第一个参数为指定的文件名,不可缺省。若第一个参数为问号字符“?”,则输出本命令格式的说明。
 命令行的第二个参数为一个整数。用正整数表示仅显示文件中的前若干个字符数;用负整数表示仅显示文件尾部的若干个字符。第二个参数可以缺省,缺省时指显示整个文件内容。
 遇到文件中的非可打印字符时以输出圆点字符“.”代替。
回复列表 (共8个回复)
沙发
bruceteen [专家分:42660] 发布于 2010-06-28 21:07:00
那么,你遇到的难点是什么呢?或者这么问,你哪一点上不会呢?
板凳
强强 [专家分:4740] 发布于 2010-06-29 00:11:00
int main(int argc,char *argv[])
3 楼
雪光风剑 [专家分:27190] 发布于 2010-06-29 06:41:00
接楼上:命令行参数的具体格式为
运行时:
程序的完整路径+完整文件名 参数1 参数2 。。。
argv[0] argv[1] argv[2]
依次类推
而argc就是系统告诉程序argv一共有多少个
4 楼
mikebinbin [专家分:0] 发布于 2010-06-29 15:05:00
就是第三点 怎么用"."代替非可打印字符呢?
5 楼
eastcowboy [专家分:25370] 发布于 2010-06-29 17:41:00
有一个函数isprint,用于判断是否是可打印字符。头文件是<ctype.h>,如果是C++,就用<cctype>。
但光靠它还不够,比如我们知道汉字一般要用两个char才能表示,如果把一个汉字拆成两半,然后用isprint判断是否为可打印字符,结果当然是错误的。
正确而且方便的做法,是使用宽字符。不论英文字符、汉字字符或者其它什么,任何字符都用两个字节来表示。这样一来就好办多了。
转变的方法很简单,
(1) 原来用char的地方,现在用wchar_t。
(2) 原来用单引号、双引号括起的地方,在前面加大写字母L。
(3) 所有函数,用带有w字眼的版本。例如fgets换成fgetws,fscanf换成fwscanf,printf换成wprintf,putchar换成putwchar等等。
(4) 在程序最开头设置你的语言,一般设置为操作系统的默认语言即可。
C语言用:setlocale(LC_ALL, "");,头文件为:<locale.h>
C++语言用:std::locale::global(std::locale(""));,头文件为:<locale>
测试代码:(C语言)
[code=c]#include <ctype.h>
#include <stdio.h>
#include <locale.h>
#define BUFFER_SIZE 1
int main() {
FILE* pFile;
wchar_t buf[BUFFER_SIZE + 1];
setlocale(LC_ALL, "");
pFile = fopen("D:\\document\\技术知识杂记.txt", "r");
if (!pFile) {
return;
}
while (fgetws(buf, BUFFER_SIZE + 1, pFile)) {
int i;
for (i = 0; buf[i] != L'\0'; ++i) {
if (iswprint(buf[i]) || iswspace(buf[i])) {
putwchar(buf[i]);
} else {
putwchar(L'.');
}
}
}
fclose(pFile);
return 0;
}[/code]
6 楼
mikebinbin [专家分:0] 发布于 2010-07-01 15:56:00
能不能给出整个程序的源代码呢??还是有些不懂啊。。。。[em18]
7 楼
overfly [专家分:3230] 发布于 2010-07-01 18:22:00
楼主,我觉得你应该将标题改为求XXX源代码发到XXX邮箱,然后让雪光风剑帮你结帖-_-!
8 楼
雪光风剑 [专家分:27190] 发布于 2010-07-02 07:20:00
我实在不知道牛仔的源代码还能怎么个完整法了……如果你还觉得不够具体的话我只能按求作业帮你结贴了,呵呵
我来回复