首页 > 试题广场 >

字符串分隔

[编程题]字符串分隔
  • 热度指数:1214641 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;

•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:

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



输出描述:

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

示例1

输入

abc

输出

abc00000
有没有大佬帮忙看下问题出在哪呀
#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)
#include <stdio.h>
#include <string.h>

void spolit(char* s) {
    int len = strlen(s);
    int sum0 = len % 8 == 0 ? 0 : 8 - (len % 8);
    for (int i = 0; i < len + sum0; i++) {
        printf("%c", i < len ? s[i] : '0');
        if ((i + 1) % 8 == 0) {
            printf("\n");
        }
    }
}
int main() {
    char s[101];
    while (scanf("%s", s) != EOF) {
        spolit(s);
    }
    return 0;
}

编辑于 2023-12-21 20:18:54 回复(0)
#include <stdio.h>

int main() {
    char s[108];
    char s1[9];
    gets(s);
    int i = 0,j = 0,m = 0;

    int k =0;
while (s[k]!='\0') {
    k++;
}

    if (s[0] == '\0') {
        return 0;
    }
    m = i+7;
    while(s[m]!='\0'){
        for (j=0; j<8; ) {
            s1[j++] = s[i++] ;
        }
        s1[8] = '\0';
        printf("%s\n",s1);
        m = i+7;
    }
    if (k%8==0) {
        return 0;
    }
    for (j = 0; j<8;) {
            if(s[i]!='\0')s1[j++] = s[i++] ;
            else
            s1[j++] = '0';
        }
    s1[8] = '\0';
    printf("%s",s1);
    return 0;

}

编辑于 2023-12-01 18:13:18 回复(0)
#include<stdio.h>
#include<string.h>

int main()
{
    char str[100] = { 0 };
    int i = 0;
    int j = 0;
    gets(str);
    int len = strlen(str);
    while (len % 8 != 0)
    {
        str[len] = '0';
        len++;
    }
    /*for (int k = 0; k < len; k++)
    {
        printf("%c", str[k]);
    }
    printf("%d", len);*/
    for (i = 0; i < len / 8; i++)
    {
        j = 0;
        for (j = 0; j < 8; j++)
        {
            printf("%c", str[i * 8 + j]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2023-09-14 16:51:16 回复(0)