题解 | #字符串分隔#
字符串分隔
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;
}