Linux下的C语言读写练习(二)

习题一:在当前目录里有一个文件 内容是

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\n",m);
//printf("text:%s",buf);
printf("string :%s \n",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("\n num=%d\n",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\n",buff);
length=strlen(buff);
printf("the length :%d\n",length);
//input
printf("please input a char: ");
scanf("%c",&c);
printf("the old text\n",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;
}

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值