鱼C论坛

 找回密码
 立即注册
查看: 3065|回复: 7

C语言求助,急需谢谢~

[复制链接]
发表于 2013-11-14 23:18:00 | 显示全部楼层 |阅读模式
2鱼币
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 17  19 23 29
3.编写一个fcat.c将命令行中指定的多个文本文件链接成为一个文本文件。例如:fcat file1 file2 file3
其中,fcat为命令名,file1、file2和file3为参数。该命令的功能是将文本文件file1、file2和file3链接成为一个文本文件
文件名由第一个参数fie1指定。
4.假设某操作系统有一条命令,该命令的功能是将指定文本文件中的所有小写字母转换成大写字母,其他的字符格式保持不变,命令的格式为:chang   filename
其中,change为命令名;参数filename为文本文件名。
请编写实现该命令的程序,要求进行命令行的正确性检查。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-15 22:40:25 | 显示全部楼层
路过,来瞅瞅
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-16 10:22:56 | 显示全部楼层

路过,来瞅瞅
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-13 01:27:31 | 显示全部楼层
千万不要忘了结贴啊~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-23 00:27:33 | 显示全部楼层
第一个问题,参数i决定大小写是否比较功能没有加进去,很简单的,自己完成吧~代码如下:
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int openfile( char *filename , FILE **fp )
  4. {
  5.         *fp = fopen( filename , "r" );
  6.        
  7.         if( *fp ==NULL )
  8.         {
  9.                 printf("open file failed!\n");
  10.                 return 1;
  11.         }
  12.         return 0;
  13. }

  14. void closefile( FILE *fp )
  15. {
  16.         if( fclose( fp ) == EOF )
  17.         {
  18.                 printf("close file failed!\n");
  19.                 exit(1);
  20.         }
  21. }

  22. int mystrcmp( char *src , char *des , int flag )
  23. {
  24.         char *tmp;
  25.        
  26.         tmp = des;
  27.         while( *src && *tmp )
  28.         {
  29.                 if( *src == *tmp )
  30.                 {
  31.                         tmp++;
  32.                 }
  33.                 else
  34.                 {
  35.                         tmp = des;
  36.                 }
  37.                 src++;
  38.         }
  39.         if( !*tmp )
  40.                 return 0;
  41.         else
  42.                 return 1;
  43. }

  44. void findstring( FILE *fp , char *str , int flag )
  45. {
  46.         int count = 0;
  47.         char file_str[100];
  48.        
  49.         while( 1 )
  50.         {
  51.                 count++;
  52.                 if( fgets( file_str , 100 , fp ) == NULL )
  53.                 {
  54.                         printf("not find it!\n");
  55.                         return;
  56.                 }
  57.                 else
  58.                 {
  59.                         if( !mystrcmp( file_str , str , flag ) )
  60.                         {
  61.                                 printf("line %d:%s\n", count , file_str);
  62.                                 return;
  63.                         }
  64.                 }
  65.         }
  66. }

  67. int main( int argc , char *argv[] )
  68. {       
  69.     FILE *fp;
  70.        
  71.         if( argc != 4 && argc != 3 )
  72.         {
  73.                 printf( "wrong input!\n" );
  74.                 return 1;
  75.         }
  76.         else
  77.         {
  78.                 if( !openfile( argv[ 2 ] , &fp ) )
  79.                 {
  80.                         if( argc == 4 )
  81.                         {
  82.                                 if( argv[1][1] == 'i' )
  83.                                 {
  84.                                         findstring( fp , argv[3] , 1 );
  85.                                         closefile( fp );
  86.                                 }
  87.                                 else
  88.                                 {
  89.                                         printf( "%c wrong paras!\n",argv[1][1] );
  90.                                         return 1;
  91.                                 }
  92.                         }
  93.                         else
  94.                         {
  95.                                 findstring( fp , argv[3] , 0 );
  96.                                 closefile( fp );
  97.                         }
  98.                 }
  99.         }
  100.        
  101.         return 1;
  102. }
复制代码
使用方法,例如我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不支持上传,我就不传了,代码有疑问明天我再写注释。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-23 00:31:54 | 显示全部楼层
第二题很简单啊~求素数而已,这都不会那你应该看书了,而不是求助。
第三题就是很简单的文件读取,新建一个文本,然后依次读取参数中的文件名中的文本内容添加到新建文本中。
第四题也是读取文本内容进行处理,直接使用现有函数toupper就行。
后面三道题很多操作都在第一题我的代码里面,好好看,好好学~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-23 11:42:04 | 显示全部楼层
注释版:
  1. #include<stdio.h>
  2. #include<stdlib.h>

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

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

  26. //字符串比较函数,也就是标准库中的strstr()函数,src是源字符串,des是待比较的字符串,flag是
  27. //是否忽略大小写的标志,1表示不忽略,0表示忽略
  28. int mystrcmp( char *src , char *des , int flag )
  29. {
  30.         char *tmp;
  31.        
  32.         tmp = des;
  33.         while( *src && *tmp )            //若src或者tmp到了末尾则结束比较,如果没找到的话一般是
  34.         {                               //src到尾端,如果找到了一般是des到尾端
  35.                 //如果字符相同则tmp指针向前挪比较下一个字符,若不同tmp则从头开始,其实这里有个算法~
  36.                 if( *src == *tmp )
  37.                 {
  38.                         tmp++;
  39.                 }
  40.                 else
  41.                 {
  42.                         tmp = des;
  43.                 }
  44.                 src++;
  45.         }
  46.         //如果是tmp到了尾端则表示找到了,返回0,否则返回1
  47.         if( !*tmp )
  48.                 return 0;
  49.         else
  50.                 return 1;
  51. }

  52. void findstring( FILE *fp , char *str , int flag )
  53. {
  54.         int count = 0;
  55.         char file_str[100];
  56.        
  57.         while( 1 )
  58.         {
  59.                 count++;
  60.                 if( fgets( file_str , 100 , fp ) == NULL )
  61.                 {
  62.                         printf("not find it!\n");
  63.                         return;
  64.                 }
  65.                 else
  66.                 {
  67.                         if( !mystrcmp( file_str , str , flag ) )
  68.                         {
  69.                                 printf("line %d:%s\n", count , file_str);
  70.                                 return;
  71.                         }
  72.                 }
  73.         }
  74. }

  75. int main( int argc , char *argv[] )
  76. {       
  77.     FILE *fp;
  78.        
  79.         if( argc != 4 && argc != 3 )
  80.         {
  81.                 printf( "wrong input!\n" );
  82.                 return 1;
  83.         }
  84.         else
  85.         {
  86.                 if( !openfile( argv[ 2 ] , &fp ) )
  87.                 {
  88.                         if( argc == 4 )
  89.                         {
  90.                                 if( argv[1][1] == 'i' )
  91.                                 {
  92.                                         findstring( fp , argv[3] , 1 );
  93.                                         closefile( fp );
  94.                                 }
  95.                                 else
  96.                                 {
  97.                                         printf( "%c wrong paras!\n",argv[1][1] );
  98.                                         return 1;
  99.                                 }
  100.                         }
  101.                         else
  102.                         {
  103.                                 findstring( fp , argv[3] , 0 );
  104.                                 closefile( fp );
  105.                         }
  106.                 }
  107.         }
  108.        
  109.         return 1;
  110. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-23 23:24:45 | 显示全部楼层
学习学习                                    
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 23:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表