一个处理Commandline的小程序

Cplusplus
回复
头像
老刘001
初来炸道
初来炸道
帖子: 6
注册时间: 2017年03月17日 23:58
联系:

一个处理Commandline的小程序

帖子 老刘001 »

帮网友写的从字符串中获取参数的小程序,会保存每个参数的指针到数组。
空格为参数分隔符,半角双引号包裹的空格不算分隔符,会去掉所有的半角双引号。半角双引号个数为奇数时最后一个双引号和字符串的余下部分算一个参数。
字符串长度、参数个数要提前获取,数组也要提前声明。
由于是在单片机中跑,所以用了快慢指针,直接处理源字符串,不耗费额外空间,时间复杂度最差、最好、平均均为O(n),n代表字符串长度。
#include <stdio.h>
int main () {
char str[] = "\" \" ←开头空引号 var -set abc →结尾空引号 \" \" ";
printf("字符串:【%s】",str);
int length = sizeof(str);
char *lp[7];

int another_i = 0,ptr = 0,i = 0;
int flag1 = 0; //是否在引号内的flag
int flag2 = 1; //是否是字段首字符的flag
for(i=0;i<=length;i++){
if(str[i] == 0x00){str[another_i]=str[i];}
if(str[i] == '"'||str[i] == 0x00){ //引号
flag1 = !flag1 ;
}else{
if(str[i] == ' '){ //空格
if(flag1 == 0){ //引号外的空格
str[i]=0x00;
flag2 = 1;
}else{ //引号中的空格
if(flag2==1){ //写入指针
lp[ptr] = str + another_i;
ptr++;
flag2 = 0;
}
}
}else{ //正常字符
if(flag2==1){ //写入指针
lp[ptr] = str + another_i;
ptr++;
flag2 = 0;
}
}
str[another_i]=str[i];
another_i++;
}
}
for(i=0;i<sizeof(lp)/sizeof(char *);i++){
printf("参数%d:【%s】",i+1,lp[i]);
}
}
在线测试:https://tool.lu/coderunner/embed/6jx.html
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Re: 一个处理Commandline的小程序

帖子 523066680 »

#include <stdio.h>
int
main ()
{
char str[] =
"\" \" ←开头空引号 var -set abc →结尾空引号 \" \" ";
printf ("字符串:【%s】", str);
int length = sizeof (str);
char *lp[7];

int another_i = 0, ptr = 0, i = 0;
int flag1 = 0; //是否在引号内的flag
int flag2 = 1; //是否是字段首字符的flag
for (i = 0; i <= length; i++)
{
if (str[i] == 0x00)
{
str[another_i] = str[i];
}
if (str[i] == '"' || str[i] == 0x00)
{
//引号
flag1 = !flag1;
}
else
{
if (str[i] == ' ')
{
//空格
if (flag1 == 0)
{
//引号外的空格
str[i] = 0x00;
flag2 = 1;
}
else
{
//引号中的空格
if (flag2 == 1)
{
//写入指针
lp[ptr] = str + another_i;
ptr++;
flag2 = 0;
}
}
}
else
{
//正常字符
if (flag2 == 1)
{
//写入指针
lp[ptr] = str + another_i;
ptr++;
flag2 = 0;
}
}
str[another_i] = str[i];
another_i++;
}
}
for (i = 0; i < sizeof (lp) / sizeof (char *); i++)
{
printf ("参数%d:【%s】", i + 1, lp[i]);
}
}
highlight-gui 格式化了一下 又显得太占行数了
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客