习题一:在当前目录里有一个文件 内容是
This is a c program 程序
现在通过C语言来实现查找指定的字符
如果输入is 则返回2
如果输入si 则返回0
下面习题答案,在算法上可能不是最佳
使用方法是 gcc 编译后 ./a.out 文件名 指定字符(不超过5个)
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<string.h> int main(int argc,char *argv[2]) { int fd,i,j,m,n; int s; int num=0; char buf[200]; char buff[5]; int len; n=0; if(argc!=3) { printf("please input a file or input a string"); exit(0); } if(strlen(argv[2])>5) { printf("out of the string only 5 "); exit(0); } fd=open(argv[1],O_RDWR); if(fd==-1) { printf("open file error"); exit(0); } //read len = read(fd,buf,200); j=strlen(buf); strcpy(buff,argv[2]); m=strlen(buff); printf("%d ",m); //printf("text:%s",buf); printf("string :%s ",buff); for(i=0;i<j;i++) { switch(m) { case 1: if(buff[0]==buf[i]) { num++; } break; case 2: if(buff[0]==buf[i]) { if(buff[1]==buf[i+1]) { num++; i++; } } break; case 3: if(buff[0]==buf[i]) { if(buff[1]==buf[i+1]) { if(buff[2]==buf[i+2]) { num++; i+=2; break; } } } break; case 4: if(buff[0]==buf[i]) { if(buff[1]==buf[i+1]) { if(buff[2]==buf[i+2]) { if(buff[3]==buf[i+3]) { num++; i+=3; break; } } } } break; case 5: if(buff[0]==buf[i+1]) { if(buff[1]==buf[i+2]) { if(buff[2]==buf[i+3]) { if(buff[3]==buf[i+4]) { if(buff[4]==buf[i+5]) { num++; i+=4; break; } } } } } break; } } printf("%s",buf); printf(" num=%d ",num); printf("%s",argv[1]); close(fd); return 0; }
习题二:在当前目录里有一个文件 内容是
This is a C program!
现在编程将其中的小写字母修改为大写字母,并修改到文件里
使用方法gcc 编译后
./a.out 文件名
在程序运行后输入要修改的单个字符,并修改文件替换原文件
#include<unistd.h> #include<stdlib.h> #include<stdio.h> #include<string.h> #include<fcntl.h> #include<sys/types.h> int main(int argc,char * argv[]) { int fd,length,i,j,m,n; char buff[50]; char c;//change //argc if(argc!= 2) { printf("please input a file "); exit(0); } //open fd=open(argv[1],O_RDWR); if(fd== -1) { printf("open file error"); exit(0); } n=read(fd,buff,50); //calc printf("the buff: %s ",buff); length=strlen(buff); printf("the length :%d ",length); //input printf("please input a char: "); scanf("%c",&c); printf("the old text ",buff); for(i=0;i< length;i++) { if(buff[i]== c) { buff[i]=buff[i]-32; } } lseek(fd,0,SEEK_SET); write(fd,buff,length); printf("the new changed text:%s",buff); close(fd); return 0; }