2.8:Maefile、计算单词个数、判断文件类型、单词逆置

本文介绍了如何使用Makefile构建C程序,包括Makefile的结构与规则,以及如何用C语言实现字符串操作(去除多余空格和单词逆置)和判断终端输入文件类型。
摘要由CSDN通过智能技术生成

1.有main.c,test.c,test1.c,创建Makefile

程序代码:

Makefile:

  1 CC=gcc
  2 EXE=hello
  3 OBJS=$(patsubst %.c,%.o,$(wildcard *.c))
  4 CFLAGS=-c -o
  5 all:$(EXE)
  6 
  7 #hello依赖test.o main.o
  8 $(EXE):$(OBJS)
  9     $(CC) $^ -o $@
 10     
 11 #main.o依赖于main.c
 12 %.o:%.c
 13     $(CC) $(CFLAGS) $@ $^
 14 
 15 .PHONY:clean
 16 clean:
 17     @rm $(OBJS) $(EXE)  

main.c

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 void fun();
  5 void fun1();
  6 int main(int argc, const char *argv[])
  7 {
  8     fun();
  9     fun1();
 10     return 0;
 11 }  

 test.c:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 void fun()
  5 {
  6     printf("hello\n");
  7     printf("world\n");
  8 } 

test1.c:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 void fun1()
  5 {
  6     printf("good study\n");
  7 } 

运行结果:

2.输入字符串,计算单词个数

程序代码:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 int main(int argc, const char *argv[])
  5 {
  6     char str[20]="";
  7     gets(str);
  8     int i=0,count=0;
  9     int flag=0;//前一个字符为空格
 10     while(str[i]!='\0')
 11     {
 12         if(str[i]==' ')//如果当前字符是空格,空
 13             flag=0;
 14         else if(flag==0)//如果当前字符不为空格,前一个字符为空格
 15         {
 16             flag=1;
 17             count++;
 18         }
 19         i++;
 20     }
 21     printf("word num=%d\n",count);
 22     return 0;
 23 }  

 运行结果:

3. 在终端输入一个文件名,判断文件的类型

程序代码:

  1 #!/bin/bash
  2 read -p "please enter file:" file
  3 if [ -b $file ]
  4 then
  5     echo "dev"
  6 elif [ -c $file ]
  7 then
  8     echo "char dev"
  9 elif [ -d $file ]
 10 then
 11     echo "dir"
 12 elif [ -L $file ]
 13 then
 14     echo "link"
 15 elif [ -S $file ]
 16 then
 17     echo "socket"
 18 elif [ -p $file ]
 19 then
 20     echo "pipe"
 21 elif [ -f $file ]
 22 then
 23     echo "regular"
 24 else
 25     echo "error"
 26 fi 

运行结果:

程序代码:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 int main(int argc, const char *argv[])
  5 {
  6     char str[]="  I  am  Chinese";
  7     //去掉多余空格
  8     char *p=str;//定义两个指针指向字符串
  9     char *q=str;//一个指向源字符串,另一个指向新字符串
 10     while(*p!='\0')//遍历字符串
 11     {
 12         //前后两个都是空格,删除一个
 13         if(*p==' '&&*(p+1)!=' '||*p!=' ')
 14         {
 15             *q=*p;//如果符合规范,把p的值给到q
 16             q++;//指针q后移
 17         }
 18         //否则只有指针p后移
 19         p++;//指针p后移
 20     }
 21     *p='\0';
 22     char *i=str,*j=str+strlen(str)-1;
 23     //整体逆置
 24     while(i<j)
 25     {
 26         char t=*i;
 27         *i=*j;
 28         *j=t;
 29         i++;j--;
 30     }
 31     //单词逆置
 32     i=j=str;
 33     while(*i!='\0')
 34     {
 35         //到空格或'\0'结束
 36         while(*j!=' '&&*j!='\0')
 37             j++;
 38         //交换i到j之前的字符
 39         char *k=j-1;
 40         while(i<k)
 41         {
 42             char t=*i;
 43             *i=*k;
 44             *k=t;
 45             i++;k--;
 46         }
 47         //跨过空格
 48         while(*j==' ')
 49             j++;
 50         i=j;
 51     }
 52     puts(str);
 53     return 0;
 54 }    

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值