首页 > 试题广场 >

字符串分隔

[编程题]字符串分隔
  • 热度指数:1237551 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的由小写字母和数字混合构成的字符串 s ,你需要按每 8 个字符换一行的方式书写它,具体地:
\hspace{23pt}\bullet\,书写前 8 个字符,换行;
\hspace{23pt}\bullet\,书写接下来的 8 个字符,换行;
\hspace{23pt}\bullet\,……
\hspace{23pt}\bullet\,重复上述过程,直到字符串被完全书写。
\hspace{15pt}特别地,如果最后一行不满 8 个字符,则需要在字符串末尾补充 0 ,直到长度为 8

输入描述:
\hspace{15pt}在一行上输入一个长度 1 \leqq {\rm length}(s) \leqq 100 ,由小写字母和数字混合构成的字符串 s


输出描述:
\hspace{15pt}输出若干行,每行输出 8 个字符,代表按题意书写的结果。
示例1

输入

hellonowcoder

输出

hellonow
coder000

说明

\hspace{15pt}在这个样例中,字符串长度为 13 ,因此需要在第二行末尾补充 30
示例2

输入

0

输出

00000000
傻瓜式一个个的输入,
#include <stdio.h>
#include <string.h>
int main() {
    char str[100]={0};
    int i,len,a,wei,l;
    scanf("%s",str);
    len=strlen(str);
for(i=len/8+1;i!=0;i--)
{   if(i!=1)
    { for(a=0;a!=8;a++){printf("%c",str[wei]);wei++;}
    printf("\n");
    }
    else if(i==1)
    {
    	if(len%8==0)
    	{
    		;
		}

	else{
	for(a=0;a!=(len%8);a++){printf("%c",str[wei]);wei++;}
     for(a=0;a!=8-(len%8);a++){printf("0");}
     printf("\n");}}
    
}
    return 0;
}

发表于 2025-03-11 17:36:33 回复(0)
#include <stdint.h>
#include <stdio.h>

int main() {

    int8_t str;
    uint32_t cnt = 0,tmp = 0;
    do
    {
        str = getchar();
        if(str == '\0' || str == EOF || str == '\n')
        {
            if(cnt == 0)
                break;
            for(int i = 0; i < 8 - cnt; i++)
                putchar('0');
            break;
        }
        putchar(str);
        cnt++;
        if(cnt%8 == 0)
        {
            putchar('\n');
            cnt = 0;
        }
    }while(1);

    return 0;
}
可以通过的垃圾代码,循环一遍,一边数一遍边输出
发表于 2025-03-08 15:21:42 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char str[110]= {0};
    int num = 0;
    char zor = '0';

    while (scanf("%s", str) != EOF) {};    
    num = strlen(str);
    for (int i = num; i < 110; i++) {
        str[i] = '0';
    }

    int rowNum = num/8;
    rowNum += (num%8 != 0)? 1:0;
    for (int i = 0; i < rowNum; i++) {
        for (short j = 0; j < 8; j++) {
            printf("%c", str[j+i*8]);
        }
        printf("\n");
    }
}
发表于 2025-02-27 15:27:31 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char s[101]; 
    scanf("%100s", s); // 读取字符串,最大长度为100,空格为输入结束标志
    int length = strlen(s); // 获取字符串的实际长度
    int i, j;
    // 按每8个字符换行书写字符串
    for (i = 0; i < length; i = i+8) {
        // 输出8个字符或剩余的所有字符
        for (j = i; j < i + 8 && j < length; j++) {
            putchar(s[j]); // 输出当前字符
        }
        // 若最后一行不满8个字符,则补充'0'
         while(j < i + 8) {
            putchar('0');
            j++;
        }
        putchar('\n'); // 换行
    }
    return 0;
}
发表于 2024-12-26 17:39:01 回复(0)
有没有大佬帮忙看下问题出在哪呀
#include <stdio.h>

int main() {
    char str[100];
    int i,j,num;
    for(i=0;i<100;i++)
    {
        str[i]='0';
    }
    i=0;
    char c='0';
    while(scanf("%c",&str[i])!=EOF)
    {
        i++;
    }
    for(i=0;i<100&&str[i]!='0';i=i+8)
    {
          for(j=i;j<i+8;j++)
        {
            if(str[j]=='\n')
            printf("%c",c);
            else
            printf("%c",str[j]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2024-11-13 23:05:13 回复(1)
#include <stdio.h>
#include <string.h>

int main() {
    char str[101];
    while (scanf("%s\n", str) != EOF) {
        int len = strlen(str);
        int count = 0;
        for (int i = 0; i < len; i++) {
            if ((count != 8 && i != len - 1) || ((i == len - 1) && count == 7)) {
                printf("%c", str[i]);
                count ++;
            } else if (count != 8 && i == len - 1) {
                count ++;
                printf("%c", str[i]);
                for (int j = 0; j < 8 - count; j++) {
                    printf("%c", '0');
                }
            } else if (count == 8 && i != len - 1) {
                printf("\n");
                count = 0;
                printf("%c", str[i]);
                count ++;
            } else if (count == 8 && i == len - 1) {
                printf("\n");
                count = 0;
                printf("%c", str[i]);
                count ++;
                for (int j = 0; j < 8 - count; j++) {
                    printf("%c", '0');
                }
            } else {
                count = 0;
            }
        }
    }
    return 0;
}
发表于 2024-11-09 16:57:38 回复(0)
我也来分享一下,C
#include <stdio.h>

int main() {
    char ch;
    char inputStr[102] = {0};
    char outputStr[9] = {0};
    int count = 0;
    fgets(inputStr, sizeof(inputStr), stdin);
    int i = 0;
    while(inputStr[i] != '\n'){
        if(count < 8){
            outputStr[count] = inputStr[i];
            count++;
        }
        if(count == 8){
            outputStr[count] = '\0';
            printf("%s\n", outputStr);
            count = 0;
        }
        i++;
    }
    if(count < 8 && count > 0){
        for(;count < 8; count++){
            outputStr[count] = '0';
        }
        outputStr[count] = '\0';
        printf("%s\n", outputStr);
    }

    return 0;
}


发表于 2024-09-07 20:50:02 回复(0)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
    char A[100]={0};
    gets(A);
    int i = 0;int j =0;
    if(strlen(A)!=0){
        for(i=0;i<strlen(A);i++){
        printf("%c", A[i]);
        j++;
        if(7/j == 0){
            printf("\n");
            j = 0;
        }
        }
    }
    if(j>0){
    for(j;j<8;j++){
        printf("0");
    }
    }
    return 0;
}
发表于 2024-08-19 17:01:27 回复(0)
8是2的整数次幂,所以可以用位运算替代除法来加快除法运算速度。除法求商用右移,右移量取以2为底除数的对数;除法求余用逻辑与,与运算的另一侧取除数减一即可。
#include <stdio.h>

int main()
{
    char buff[128];
    while(scanf("%s",buff) != EOF)
    {
        for(int i=0;i<sizeof(buff);i++)
        {
            if((i&7)==0 && i!=0)putc('\n',stdout);
            if(buff[i])
                putc(buff[i],stdout);
            else
            {
                if(i&7)
                    for(int j=0;j<8-(i&7);j++)
                        putc('0',stdout);
                break;
            }
        }
    }
    return 0;
}


发表于 2024-08-17 05:47:50 回复(0)
大佬们为什么我在本地输出正常,在这里输出有乱码啊
#include <stdio.h>
#include <string.h>


int main()
{
    char str[104];
    scanf("%s",str);
    int len = strlen(str);
    // printf("len=%d\n",len);
    if(len==0)
    {
        return -1;
    }
    int n = len%8;
    // 字符串处理
    if(n!=0)
    {
        for(int i=0;i<8-n;i++)
        {
            str[len+i] = '0';
        }
    }
    // printf("str=%s\n",str);
    // 分割输出
    char *p=str;
    int count=8;
    while(*p!='\0' && count!=0)
    {
        printf("%c",*p++);
        count--;
        if(count==0)
        {
            printf("\n");
            count=8;
        }
    }

    return 0;
}

发表于 2024-08-05 15:25:14 回复(1)
#include <stdio.h>
#include <string.h>

int main() {
    int count = 0;
    char arr[100];
    gets(arr);
    int size = strlen(arr);
    int len = size/8;
    int tail = size%8;
    if(tail!=0){
        tail = 8-tail;
    }
    for(int i = 0;i<size+tail;i++){
        if(i<size){
            printf("%c", arr[i]);
        }
        else if(i>=size){
            printf("%c", '0');
        }
        count++;
        if(count%8==0){
            printf("\n");
        }

       
    }
    // printf("%s", arr);

    return 0;
}
发表于 2024-08-02 18:04:21 回复(0)
PKCS5填充算法
发表于 2024-07-22 14:49:48 回复(0)
#include <stdio.h>
#include<string.h>
void test1(char xin[100], int length) {

    char* p = xin;
    if (*p != '\0') {
        int j = length / 8;
        for (int h = 0; h < j; h++) {
            for (int i = 0; i < 8; i++) {
                printf("%c", *p);
                p++;
            }
            printf("\n");
        }
    }

}
int main() {
    char xin[100] = {0};
    gets(xin);
    int length = strlen(xin);
    if (length % 8 == 0) {
        test1(xin, length);
    }
    if (length % 8 != 0) {
        int q = 8 - length % 8;
        for (int k = 0; k < q; k++) {
            xin[length] = '0';
            length++;
        }
        test1(xin, length);
    }
    return 0;
}
发表于 2024-06-05 09:12:56 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char str[9] = "";

    while (1) {
        char tmp[9] = "00000000";
        str[sizeof(str) - 1] = '\0';

        // 最多获取 8 个输入,超过 8 个的输入下次 scanf 获取
        if (scanf("%8s", str) == EOF)
            break;
        
        strncpy(tmp, str, strlen(str));
        printf("%s\n", tmp);
    }
    
    return 0;
}

发表于 2024-04-19 17:37:11 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char s[101];
    int j;
    int count = 0;
    scanf("%s", s);
    int len = strlen(s);
    for (int i = 1; i <= len / 8 + 1; i++) {
        count = 0;
        for ( j = 7 * (i - 1); j <= 7 * i; j++) {
            printf("%c", s[j]);
            if (s[j]=='\0') {
                break;
            }
            count++;
        }

        if (count != 8) {
            for (int q = count; q < 8; q++)
                printf("0");
        }


        printf("\n");
    }

    return 0;
}w为啥本地ide是对的  然后 网站是错的啊

发表于 2024-04-02 22:40:36 回复(0)
求大佬们解答问题出在哪里
#include<stdio.h>
#include<string.h>//包含strncpy函数

int Function(char STR[100],char *P,int N);//设置功能递归函数
int main(void)
{
    char str[100];
    char *p=str;
    gets(str);
    int n=strlen(str);//计算字符串的长度
    Function(str,p,n);//调用递归函数
    return 0;
}
int Function(char STR[100],char *P,int N)
{
    if(N>=8)
    {
        int i=1;
        char str2[100];//定义另一个字符串数组用来储存字符串前八位
        strncpy(str2,STR,8);
        puts(str2);//输出这八位
        printf("\n");
        N=N-8;
        for(i=0;i<N;i++)//数组前移八位
        {
            STR[i]=STR[i+8];
        }
        P=STR[N];
        free(P);
        Function(STR,P,N);//递归调用自己
    }
    if(N<8)
    {
        int i=0;
        for(i=N;i<8;i++)
        {
            STR[i]='0';//用0补位
        }
        puts(STR);//输出
        printf("\n");
        return 0;
    }
}

编辑于 2024-03-05 22:40:04 回复(0)
#include <stdio.h>
#include <string.h>

int main(){
    char str[100];
    char str1[8];
    while(scanf("%8s",&str)!=EOF)
    {
        printf("%s\n",str);
        strcpy(str1,str);
        memset(str,'0',8);
        memmove(str,str1,strlen(str1));//如果是100的放在8的头上有问题
        printf("%s\n",str);
    }
}
各位大佬,我这个大于等于8的字符串的时候就报错,为什么呀?


发表于 2024-02-10 20:22:53 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    char str[101] = {0}, *p;
    fgets(str, 101, stdin);
    if (strlen(str) < 100) {
        str[strlen(str) - 1] = '\0';
    }
    int i = 1;
    p = str;
    while (*p) {
        if (i == 9) {
            printf("\n");
            i = 1;
        }
        printf("%c", *p);
        i++;
        *p++;
    }
    for (i ; i <= 8 ; i++)
        printf("0");

    return 0;
}

发表于 2024-01-11 00:35:35 回复(0)

问题信息

难度:
76条回答 139782浏览

热门推荐

通过挑战的用户

查看代码
字符串分隔