题解 | #字符串分隔#

字符串分隔

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;
}

全部评论

相关推荐

01-13 16:55
已编辑
大连理工大学 运营
点赞 评论 收藏
分享
思念SiN:你这里没有通过的主要原因应该是计算平均分数的时候,在你贴的代码的第23行: ```c b[i]=(sum-max-min)/(m-2); ``` 等式的右边实际上是两个`int`类型的变量在做除法,C语言里面得到的结果会是这个除法的整数部分,余数部分被舍弃了,也不会自动变成浮点数去做除法。所以虽然你使用了`b[i]`这个浮点数去接收结果,但是等式右边除法是先得到了一个整数,然后再被转换为浮点数再赋值给了`b[i]`。你可以按下面这样,在做除法之前,先进行类型转换,就能得到期望的结果: ```c b[i]=(float)(sum-max-min)/(float)(m-2); ```
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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