题解 | #字符串分隔#

字符串分隔

https://www.nowcoder.com/practice/d9162298cb5a437aad722fccccaae8a7

#include <stdio.h>

// 定义一个长度为 8 的队列来放置输入的字符。
typedef struct Queue{
    char data[8]; // 连续 8 个字符存储空间。
    int front, rear; // 队头队尾指针。
}*Queue;

// 初始化队列。
Queue initiate(Queue Q){
    // 给队列分配内存。
    Q = (Queue)malloc(sizeof(Queue));
    // 将队列的数据域初始化为 0.
    for(int i = 0; i < 8; i++){
        Q->data[i] = '0';
    }
    // 初始化队头指针和队尾指针。
    Q->front = 0;
    Q->rear = 0;
    return Q;
}

// 判断队列是否为满。
int isFull(Queue Q){
    if(Q->rear > 7){
        return 1;
    }else{
        return 0;
    }
}

// 元素入队。
int EnQueue(Queue Q, char x){
    // 判断队列是否为满,如果为满则报错。
    if(isFull(Q)){
        printf("[Error] 队列为满队,无法入队新元素。");
        return -1;
    }else{
        Q->data[Q->rear] = x; // 将新元素入队到队尾的位置。
        Q->rear++;
        return 0;
    }
}

// 元素出队。
char DeQueue(Queue Q){
    int character = Q->data[Q->front];
    Q->data[Q->front] = '0';
    Q->front++;
    return character;
}

int main() {
    // 初始化队列。
    Queue Q = NULL;
    Q = initiate(Q);
    // 在没有输入结束之前一直循环读入输入内容。
    char character;
    scanf("%c", &character);
    while(character != '\n'){
        // 如果队列没有满则将读入的字符入队。
        if(!isFull(Q)){
            EnQueue(Q, character);
        }else{
            // 队列已满,将队列中的 8 个字符输出然后再入队新的字符。
            for(int i = 0; i < 8; i++){
                printf("%c", DeQueue(Q));
            }
            printf("\n");
            // 将队首及队尾指针重置。
            Q->front = Q->rear = 0;
            // 将新读入的字符入栈。
            EnQueue(Q, character);
        }
        scanf("%c", &character);
    }
    // 如果队列中有剩余的字符,则输出。
    if(Q->front != Q->rear){
        for(int i = 0; i < 8; i++){
            printf("%c", DeQueue(Q));
        }
        printf("\n");
        Q->front = Q->rear = 0;
    }
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
04-30 18:05
空屿编号:你把墨镜摘下来是不是这样😭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务