回 帖 发 新 帖 刷新版面

主题:[讨论]各位大虾们~~~帮帮忙啊~~~~十万火急~~

编写一个程序TypeF.cpp模仿Windows命令type的功能显示指定文件的内容。要求作如下改进:
    命令行的第一个参数为指定的文件名,不可缺省。若第一个参数为问号字符“?”,则输出本命令格式的说明。
    命令行的第二个参数为一个整数。用正整数表示仅显示文件中的前若干个字符数;用负整数表示仅显示文件尾部的若干个字符。第二个参数可以缺省,缺省时指显示整个文件内容。
    遇到文件中的非可打印字符时以输出圆点字符“.”代替。

回复列表 (共8个回复)

沙发

那么,你遇到的难点是什么呢?或者这么问,你哪一点上不会呢?

板凳

int main(int argc,char *argv[])

3 楼

接楼上:命令行参数的具体格式为
运行时:
程序的完整路径+完整文件名     参数1       参数2      。。。
argv[0]                       argv[1]     argv[2]
依次类推
而argc就是系统告诉程序argv一共有多少个

4 楼


就是第三点 怎么用"."代替非可打印字符呢?

5 楼

有一个函数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 楼


能不能给出整个程序的源代码呢??还是有些不懂啊。。。。[em18]

7 楼

楼主,我觉得你应该将标题改为求XXX源代码发到XXX邮箱,然后让雪光风剑帮你结帖-_-!

8 楼

我实在不知道牛仔的源代码还能怎么个完整法了……如果你还觉得不够具体的话我只能按求作业帮你结贴了,呵呵

我来回复

您尚未登录,请登录后再回复。点此登录或注册