状态机编程之我见

本文探讨了状态机编程的概念,通过实例展示了如何使用状态机实现main函数中的argc和argv[]处理,包括统计参数个数和存储参数首地址。同时,文章提到了状态机在面试中的常见应用,特别是如何利用状态机去除字符串中的多余空格,仅保留单个空格。
摘要由CSDN通过智能技术生成

状态机其实就是用标志位表示事物所处的状态。我现在用状态机实现int main(int argc,char *argv[])中的argc和argv[]。

argc即统计输入的参数个数

argv[]即存储各个参数的首地址

#include<stdio.h>

char str[128]="./a.out 100  200";
char *argv[20]={};
int argc=0,state=0,i=0;         //state是标志位

void parse(void)
{
	while(str[i])
	{
		if(state == 0 && str[i] != ' ')     //当标志位为0且不是空格时
		{
			state=1;                    //状态改变
                        argv[argc++]=str+i;         //指针数组记录参数首地址
		}
		if(state ==1 && str[i] == ' ')      //当标志位为1且是空格时
		{
			state=0;                    //状态改变
			str[i]='\0';                //读取某个参数结束,设置结束符
		}
		i++;
	}
}
int main(void)
{
	printf("%s\n",str);
	parse();
	printf("argc=%d\n",argc);
	for(i=0;i<argc;i++)
		printf("argv[%d]=%s\n",i,argv[i]);
	return 0;

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值