【蓝蓝计算机考研算法】-day28-字符串分割为长度8

105 阅读2分钟

42、输入一个字符串,请按长度为8,拆分每个输入字符串

题目:输入一个字符串,请按长度为8,拆分每个输入字符串,并进行输出。长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述

连续输入字符串。(每个字符串长度小于等于100)

输出描述

依次输出所有分割后的长度为8的新字符串。

示例

输入:abc
输出:abc00000

思路

判断每次输入的字符串长度是否为8的倍数,若是8的倍数 直接输出就行; 若不是8的倍数, 则需要补0的个数为8 - len % 8。

注意: gets()和scanf()的区别在于输入的字符串是否中间有空格; 对于前者,只有遇到"\n"时才停止输入,而对于后者, 出现"\n"或空格都停止输入

具体实现

#include<stdio.h>
#include<string.h>
int main()
{
    char str[100];
    int i, j;
    int len, need;
    while (gets_s(str))
    {
        len = strlen(str);
        for (i = 0; i < len; i++)
        {
            if ((i + 1) % 8 == 0)
            {
                printf("%c\n", str[i]);  //字符串长度为8的倍数,直接换行输出
            }
            else
                printf("%c", str[i]);
        }
        if (len % 8 != 0)
        {
            need = 8 - len % 8;   //补0的个数
            for (i = 0; i < need; i++)
            {
                printf("0");
            }
            printf("\n");
        }

    }
    return 0;
}

运行结果

image.png

复杂度

  • 时间复杂度O(n) --- 其中n为字符串长度
  • 空间复杂度O(1) --- 没有额外的辅助空间,常数级存储空间,数组的大小是有限个,可以忽略不计

小结

关于用VS2022

输入函数的用法:

char buf[5];
scanf_s("%s", buf, 5);//表示最多读取4个字符,因为buf[4]要放'\n'
  • 编译时报错:gets()未定义标识符, 可以通过在gets()后面加上_s解决,即gets_s()。