当前位置: 首页 > article >正文

26、Makefile/shell/字符串处理相关练习20240208

一、现有文件test.c\test1.c\main.c , 请编写Makefile.

vi Makefile 创建

代码:

CC=gcc
EXE=who
OBJS=$(patsubst %.c,%.o,$(wildcard *.c))
FLAGS=-c -o

all:$(EXE)

$(EXE):$(OBJS)
	$(CC) $^ -o $@

%.o:%.c
	$(CC) $(FLAGS) $@ $^

.PHONY:clean

clean:
	@rm $(OBJS) $(EXE)

运行:

二、C编程实现:输入一个字符串,计算单词的个数

如:“this is a boy”  输出单词个数:4个

代码:

#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int word_number(char *p)
{
	int i=0,count=0;
	while(*(p+i))//外层循环控制到'\0'结束;
	{
		int j=i;
		while(*(p+j)!=' ' && *(p+j)!='\0')// 跳过单词到空格或\0结束;
			j++;
		if(*(p+j)==' ')// 记录单词中间空格的个数;
			count++;
		while(*(p+j)==' ')// 跳过空格
			j++;
		i=j;// 外层循环步长,即从下一个单词开始下一轮循环
	}
	return count+1;//单词个数等于中间空格个数加一
}
int main(int argc, const char *argv[])
{
	char str[20]="";
	printf("please enter the str:");
	gets(str);//gets可以获取终端输入含有空格的字符串;

	int count=word_number(str);封装函数计算个数
	printf("number of words is:%d\n",count);

	return 0;
}

运行:

三、在终端输入一个文件名,判断文件类型

代码:

#!/bin/bash

read -p "please enter file:" file

if [ -b $file ]
then
	echo dev
elif [ -c $file ]
then
	echo char_dev
elif [ -d $file ]
then
	echo dir
elif [ -L $file ]
then 
	echo link
elif [ -S $file ]
then
	echo socket
elif [ -p $file ]
then
	echo pipe
elif [ -f $file ] 
then
	echo regular
else
	echo error
fi

运行:

四、C编程实现字符串倒置:(注意 是倒置,而不是直接倒置输出)

如:原字符串为:char *str = “I am Chinese”

倒置后为:“Chinese am I”

附加要求:删除原本字符串中 多余的空格。

代码:

#include<stdlib.h>
#include<string.h>
#include<stdio.h>
void Inversion(char *p)
{
	int k=strlen(p)-1;//计算字符串长度;
	int i=0;
	while(i<k)//整体逆置;
	{
		char t=*(p+i);
		*(p+i)=*(p+k);
		*(p+k)=t;
		i++;k--;
	}
	i=0;
	while(*(p+i))//外层循环控制到'\0'结束;
	{
		int j=i;
		while(*(p+j)!=' '&& *(p+j)!='\0') //找到单词后面的第一个空格或'\0';
			j++;
		k=j-1;//k为单词最后一个字母;
		while(i<k)//单词再逆置;
		{
			char t=*(p+i);
			*(p+i)=*(p+k);
			*(p+k)=t;
			i++;k--;
		}
		int z=j+1;//z为空格的后一个字符
		while(*(p+z)==' ') //如果z仍未空格 则将后续字符串整体前移
		{
			int x=z;
			while(*(p+x))//整体前移(等价于删除多余空格)
			{
				*(p+x)=*(p+x+1);
				x++;
			}
		}
		i=z;//循环结束时即表示z的位置不为空格,将位置赋值给i;
	}
}
int main(int argc, const char *argv[])
{
	char str[]="I am     Chinese";//定义字符串
	Inversion(str);//封装函数逆置单词并删除多余空格
	puts(str);//输出逆置后的字符串;
	return 0;
}

运行:


http://www.kler.cn/a/231786.html

相关文章:

  • Java基础-Java中的常用类(上)
  • 抽象java入门1.5.3.1——类的进阶
  • 【Android】EventBus事件总线用法浅析
  • 【jvm】HotSpot中方法区的演进
  • 006.精读《Apache Paimon Docs - Concepts》
  • 【H3C华三 】VRRP与BFD、Track联动配置案例
  • Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 ✨
  • 《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
  • Leetcode第123场双周赛
  • 【MySQL】学习和总结DCL的权限控制
  • 智慧自助餐饮系统(SpringBoot+MP+Vue+微信小程序+JNI+ncnn+YOLOX-Nano)
  • SASS 官方文档速通
  • TCP和UDP相关问题(重点)(5)——5.TCP三次握手和四次挥手(非常重要)
  • 移动云ONAIR媒体云全解读!媒体内容数字化融合一站式解决方案
  • 小白代码审计入门
  • 每日一题——LeetCode1422.分割字符串的最大得分
  • 在Python中如何定义一个闭包并使用它
  • 跳过mysql5.7密码并重置密码 shell脚本
  • IP风险画像在企业网络统计与安全防范中应用
  • 使用Vue+ ECharts进行动态图表展示
  • jsp教务管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • Spring Boot的打包方式:JAR vs. WAR 打包方式
  • office文件转pdf在线预览
  • Redis面试题41
  • Ubuntu 命令与脚本
  • Redis核心技术与实战【学习笔记】 - 29.Redis的未来猜想,基于 NVM内存