/* 处理不确定一行有多少个参数的指令
处理数字
输入:
2 3 44
输出:
2|3|44|
处理字符
输入:
a b s f
输出:
a|b|s|f|
处理字符串(当前处理方式!!!只是把input3中每个字符串的首地址赋值给char *str[128],且原本的input3数据已经改变,分割符的字符替换为'\0'。如果需要存储这些字符串,则需要一开始就给char *str[128]分配新的内存空间或者直接用字符数组接收)
输入:
asdf fgs ges
输出:
asdf|fgs|ges|
处理:不断获取stdin的输入,直到遇到ctrl+c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 处理数字
int num[128] = {0};
int len_num = 0;
char input1[128] = {0};
fgets(input1, 128, stdin);
char* token1 = strtok(input1, " \n");
while (token1 != NULL)
{
num[len_num++] = atoi(token1);
token1 = strtok(NULL, " \n");
}
for (int i = 0; i < len_num; i++)
{
printf("%d!", num[i]);
}
printf("\n");
// 处理字符
char ch[128] = {0};
int len_ch = 0;
char input2[128] = {0};
fgets(input2, 128, stdin);
char* token2 = strtok(input2, " \n");
while (NULL != token2)
{
ch[len_ch++] = token2[0];
token2 = strtok(NULL, " \n");
}
for (int i = 0; i < len_ch; i++)
{
printf("%c!", ch[i]);
}
printf("\n");
// 处理字符串(当前处理方式!!!只是把input3中每个字符串的首地址赋值给char *str[128],且原本的input3数据已经改变,分割符的字符替换为'\0'。如果需要存储这些字符串,则需要一开始就给char *str[128]分配新的内存空间或者直接用字符数组接收)
char *str[128] = {0};
int len_str = 0;
char input3[128] = {0};
fgets(input3, 128, stdin);
char* token3 = strtok(input3, " \n"); // 处理字符串时,strtok的delim需要带\n
while (NULL != token3)
{
str[len_str++] = token3;
token3 = strtok(NULL, " \n");
}
for (int i = 0; i < len_str; i++)
{
printf("%s!", str[i]);
}
printf("\n");
// 不断获取stdin的输入,直到遇到ctrl+c
char input4[128] = {0};
while (fgets(input4, 128, stdin))
{
// 方式一:
if (0 == strlen(input4))
{
break;
}
// 方式二:
/* if (0 == strcmp("\0", input4))
{
break;
} */
}
return 0;
}