lingerssgood 发表于 2013-11-14 23:18:00

C语言求助,急需谢谢~

1.命令sgrep用来在文件中查找给定字符串,并输出串所在行及行号。 命令格式为:sgrep [-i] filename searchstring
其中:-i:表示查找时大小写无关,省略时表示大小写相关。
filename:给定文件名。
searchstring:所要查找的串。
用C语言实现该程序,该程序应具有一定的错误处理能力。(提示:使用命令行参数) 注意:除文件及输入/出操作可使用库函数外,其它不允许使用库函数。
2.使用命令行参数形式编写c语言程序以实现从第2开始的连续输出n个素数。
设命令行格式为 : outprime n
例如:执行命令c>outprime 10↙
的结果是:2 3 5 7 11 13 1719 23 29
3.编写一个fcat.c将命令行中指定的多个文本文件链接成为一个文本文件。例如:fcat file1 file2 file3
其中,fcat为命令名,file1、file2和file3为参数。该命令的功能是将文本文件file1、file2和file3链接成为一个文本文件
文件名由第一个参数fie1指定。
4.假设某操作系统有一条命令,该命令的功能是将指定文本文件中的所有小写字母转换成大写字母,其他的字符格式保持不变,命令的格式为:chang   filename
其中,change为命令名;参数filename为文本文件名。
请编写实现该命令的程序,要求进行命令行的正确性检查。

夏七夕 发表于 2013-11-15 22:40:25

路过,来瞅瞅

莫名C 发表于 2013-11-16 10:22:56


路过,来瞅瞅

五号智能 发表于 2014-1-13 01:27:31

千万不要忘了结贴啊~

谭斌谭斌 发表于 2014-1-23 00:27:33

第一个问题,参数i决定大小写是否比较功能没有加进去,很简单的,自己完成吧~代码如下:#include<stdio.h>
#include<stdlib.h>

int openfile( char *filename , FILE **fp )
{
        *fp = fopen( filename , "r" );
       
        if( *fp ==NULL )
        {
                printf("open file failed!\n");
                return 1;
        }
        return 0;
}

void closefile( FILE *fp )
{
        if( fclose( fp ) == EOF )
        {
                printf("close file failed!\n");
                exit(1);
        }
}

int mystrcmp( char *src , char *des , int flag )
{
        char *tmp;
       
        tmp = des;
        while( *src && *tmp )
        {
                if( *src == *tmp )
                {
                        tmp++;
                }
                else
                {
                        tmp = des;
                }
                src++;
        }
        if( !*tmp )
                return 0;
        else
                return 1;
}

void findstring( FILE *fp , char *str , int flag )
{
        int count = 0;
        char file_str;
       
        while( 1 )
        {
                count++;
                if( fgets( file_str , 100 , fp ) == NULL )
                {
                        printf("not find it!\n");
                        return;
                }
                else
                {
                        if( !mystrcmp( file_str , str , flag ) )
                        {
                                printf("line %d:%s\n", count , file_str);
                                return;
                        }
                }
        }
}

int main( int argc , char *argv[] )
{       
    FILE *fp;
       
        if( argc != 4 && argc != 3 )
        {
                printf( "wrong input!\n" );
                return 1;
        }
        else
        {
                if( !openfile( argv[ 2 ] , &fp ) )
                {
                        if( argc == 4 )
                        {
                                if( argv == 'i' )
                                {
                                        findstring( fp , argv , 1 );
                                        closefile( fp );
                                }
                                else
                                {
                                        printf( "%c wrong paras!\n",argv );
                                        return 1;
                                }
                        }
                        else
                        {
                                findstring( fp , argv , 0 );
                                closefile( fp );
                        }
                }
        }
       
        return 1;
}
使用方法,例如我c盘COutputFile文件夹下有一个t.txt文本,在命令行使用:
test -i E:\\COutputFile\\t.txt "Multicasting"
在t.txt文本中查找字符串Multicasting,并显示行号,输出如下:
line 17:I have checked, and Multicasting support is installed on the host (Server 2008).
t.txt不支持上传,我就不传了,代码有疑问明天我再写注释。

谭斌谭斌 发表于 2014-1-23 00:31:54

第二题很简单啊~求素数而已,这都不会那你应该看书了,而不是求助。
第三题就是很简单的文件读取,新建一个文本,然后依次读取参数中的文件名中的文本内容添加到新建文本中。
第四题也是读取文本内容进行处理,直接使用现有函数toupper就行。
后面三道题很多操作都在第一题我的代码里面,好好看,好好学~

谭斌谭斌 发表于 2014-1-23 11:42:04

注释版:#include<stdio.h>
#include<stdlib.h>

/*打开文件,第二个参数是指针的指针,因为你要得到的是一个指向FILE结构体的指针
也就是说你要修改的是一个指针的值,所以传入指针的指针
*/
int openfile( char *filename , FILE **fp )
{
        *fp = fopen( filename , "r" );
       
        if( *fp ==NULL )
        {
                printf("open file failed!\n");
                return 1;
        }
        return 0;
}

//关闭文件,记得判断是否成功,这是个好习惯
void closefile( FILE *fp )
{
        if( fclose( fp ) == EOF )
        {
                printf("close file failed!\n");
                exit(1);
        }
}

//字符串比较函数,也就是标准库中的strstr()函数,src是源字符串,des是待比较的字符串,flag是
//是否忽略大小写的标志,1表示不忽略,0表示忽略
int mystrcmp( char *src , char *des , int flag )
{
        char *tmp;
       
        tmp = des;
        while( *src && *tmp )            //若src或者tmp到了末尾则结束比较,如果没找到的话一般是
        {                               //src到尾端,如果找到了一般是des到尾端
                //如果字符相同则tmp指针向前挪比较下一个字符,若不同tmp则从头开始,其实这里有个算法~
                if( *src == *tmp )
                {
                        tmp++;
                }
                else
                {
                        tmp = des;
                }
                src++;
        }
        //如果是tmp到了尾端则表示找到了,返回0,否则返回1
        if( !*tmp )
                return 0;
        else
                return 1;
}

void findstring( FILE *fp , char *str , int flag )
{
        int count = 0;
        char file_str;
       
        while( 1 )
        {
                count++;
                if( fgets( file_str , 100 , fp ) == NULL )
                {
                        printf("not find it!\n");
                        return;
                }
                else
                {
                        if( !mystrcmp( file_str , str , flag ) )
                        {
                                printf("line %d:%s\n", count , file_str);
                                return;
                        }
                }
        }
}

int main( int argc , char *argv[] )
{       
    FILE *fp;
       
        if( argc != 4 && argc != 3 )
        {
                printf( "wrong input!\n" );
                return 1;
        }
        else
        {
                if( !openfile( argv[ 2 ] , &fp ) )
                {
                        if( argc == 4 )
                        {
                                if( argv == 'i' )
                                {
                                        findstring( fp , argv , 1 );
                                        closefile( fp );
                                }
                                else
                                {
                                        printf( "%c wrong paras!\n",argv );
                                        return 1;
                                }
                        }
                        else
                        {
                                findstring( fp , argv , 0 );
                                closefile( fp );
                        }
                }
        }
       
        return 1;
}

fishc_hz 发表于 2014-1-23 23:24:45

学习学习                                    
页: [1]
查看完整版本: C语言求助,急需谢谢~