题目4:命令行选项
问题描述
请你写一个命令行分析程序,用以分析给定的命
令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,不含任何其他符号。在工具名字之后可能会包含若干选项(以减号”-”开头的字符串),还可能包含一些不是选项的参数(不以减号“-”开头的字符串)。
请写一个程序分析给出的命令行,输出命令行包含的不重复选项(即,重复的选项只输出一次)。
输入格式
输入是一个待处理的命令行,长度不超过 255 个字符。该命令行一定是若干个由单个空格分隔的字符串构成,每个字符串里只包含小写字母,数字和减号。
输出格式
按照字母升序输出该命令行中用到的所有选项的名称,如果一个选项在命令行中出现了多次,只输出一次,如果命令行不包含任何选项,则输出no。
样例输入1
ls -a -l -a documents -b
样例输出1
-a -b -l
样例输入2
ls
样例输出2
no
样例输入
ls -w 10 -x -w 15
样例输出
-w -x
#include<stdio.h>
#include<string.h>
int main()
{
//输入
char string[256] = { 0 };
char str[100][100] = { 0 };
gets_s(string);
//将所有命令搬入str中
int record = 0;
for (int i = 0; string[i] != '\0'; i++)
{
if (string[i] == '-')
{
for (int k = 0; string[i] != ' ' && string[i] != '\0'; k++,i++)
{
str[record][k] = string[i];
}
record++;
}
if (string[i] == '\0')
{
break;
}
}
if (record == 0)
{
printf("no\n");
}
else
{
//先对二维数组进行排序
for (int i = 0; i < record - 1; i++)
{
for (int j = i + 1; j < record; j++)
{
if (strcmp(str[j], str[i]) < 0)
{
char tmp[100] = { 0 };
strcpy(tmp, str[j]);
strcpy(str[j], str[i]);
strcpy(str[i], tmp);
}
}
}
//打印第一个字符串
printf("%s ", str[0]);
//若下一行与上一行不同则打印下一行
for (int i = 0; i < record - 1; i++)
{
if (strcmp(str[i], str[i + 1]))
{
printf("%s ", str[i + 1]);
}
}
}
return 0;
}