處理stdin輸入的字串指令

jason8826發表於2024-04-21
/* 處理不確定一行有多少個引數的指令
處理數字
輸入:
2 3 44
輸出:
2|3|44|

處理字元
輸入:
a b s f
輸出:
a|b|s|f|

處理字串(這種可能不太安全,以後有機會看看能不能最佳化)
輸入:
asdf fgs ges
輸出:
asdf|fgs|ges| 

處理:不斷獲取stdin的輸入,直到遇到ctrl+c
*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char input1[32] = {0};
    char input2[32] = {0};
    char input3[128] = {0};
    char input4[32] = {0};

    // 處理數字
    fgets(input1, 32, stdin);
    int num[32] = {0};
    int sum1 = 0;
    char* token1 = strtok(input1, " ");
    while (token1 != NULL)
    {
        num[sum1++] = atoi(token1);
        token1 = strtok(NULL, " ");
    }
    for (int i = 0; i < sum1; i++)
    {
        printf("%d!", num[i]);
    }
    printf("\n");



    // 處理字元
    fgets(input2, 32, stdin);
    char ch[32] = {0};
    int sum2 = 0;
    char* token2 = strtok(input2, " ");
    while (NULL != token2)
    {
        ch[sum2++] = token2[0];
        token2 = strtok(NULL, " ");
    }
    for (int i = 0; i < sum2; i++)
    {
        printf("%c!", ch[i]);
    }
    printf("\n");

    // 處理字串(這種可能不太安全,以後有機會看看能不能最佳化)
    fgets(input3, 128, stdin);
    char *str[32] = {0};
    int sum3 = 0;
    char* token3 = strtok(input3, " \n");  // 處理字串時,strtok的delim需要帶\n
    while (NULL != token3)
    {
        str[sum3++] = token3;
        token3 = strtok(NULL, " \n");
    }
    for (int i = 0; i < sum3; i++)
    {
        printf("%s!", str[i]);
    }
    printf("\n");

    // 不斷獲取stdin的輸入,直到遇到ctrl+c
    while (fgets(input4, 32, stdin))
    {
        // 方式一:
        if (0 == strlen(input4))
        {
            break;
        }
        // 方式二:
        /* if (0 == strcmp("\0", input4))
        {
            break;
        } */
    }

    return 0;
}

相關文章