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

•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。


输入描述:

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



输出描述:

输出到长度为8的新字符串数组

示例1

输入

abc
123456789

输出

abc00000
12345678
90000000
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){         
        	String s = new String(sc.nextLine());
        	if(s.length()%8 !=0 )
        		s = s + "00000000";
        	
        	while(s.length()>=8){
        		System.out.println(s.substring(0, 8));
        		s = s.substring(8);
        	}
        }
    }
}

发表于 2016-07-07 23:26:13 回复(142)
#include <iostream>

using namespace std;

int main(){
    string str;
    
    while(getline(cin,str)){
        while(str.size()>8){
            cout << str.substr(0,8) <<endl;
            str=str.substr(8);
        }
        cout << str.append(8-str.size(),'0') << endl;	//不够8位的补0
    }
}
编辑于 2016-08-26 19:52:31 回复(18)
#include <iostream>
#include <string>
using namespace std;
void ***(string str) {
	if (str == "")
		return;
	if (str.size() <= 8) {
		str.append(8 - str.size(), '0');
		cout << str << endl;
		return;
	}
	cout << str.substr(0, 8) << endl;
	***(str.substr(8, str.size()));
}
int main() {
	string str1, str2;
	cin >> str1 >> str2;
	***(str1);
	***(str2);
	return 0;
}

发表于 2016-07-22 18:15:20 回复(41)
def printStr(string):
    if len(string) <= 8:
        print(string + "0" * (8 - len(string)))
    else:
        while len(string) > 8:
            print(string[:8])
            string = string[8:]
        print(string + "0" * (8 - len(string)))
a=input()
b=input()
printStr(a)
printStr(b)

Python3解法。

发表于 2017-09-06 15:53:23 回复(23)
a=raw_input()
b=raw_input()

def chstr(line):
    left = len(line)%8
    if left != 0:
        line += "0" * (8 - left)
    for i in range(len(line) / 8):
        print line[i*8:(i+1)*8]

chstr(a)
chstr(b)

发表于 2016-07-06 21:53:17 回复(16)
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    while(cin >> s)
    {
        s = s + "0000000"; //特别强调这里是7个0
        while(s.size() >= 8)
        {
            cout << s.substr(0,8) << endl;
            s = s.substr(8);
        }
    }
    return 0;
}


发表于 2019-07-28 16:38:13 回复(6)
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			String s=sc.nextLine();
			StringBuffer sb=new StringBuffer(s);
			if(s.length()%8!=0){
				int n=8-s.length()%8;
				for(int i=0;i<n;i++){
					sb.append("0");
				}
			}
			while(sb.length()>=8){
				System.out.println(sb.substring(0, 8));
				sb=sb.delete(0, 8);
			}
		}
	}
}


编辑于 2016-07-12 09:34:30 回复(16)
#include <stdio.h>
#include <string.h>

char* copy(char* dst, char* src, int n){
    for (int i = 0; i < n; ++i){
        if (src[i]) dst[i] = src[i];
        else dst[i] = '0';
    }
    return dst;
}

int main(){
    char buf[112] = {0};
    char out[9] = {0};
    while(gets(buf)){
        char *p = buf;
        while(*p){
            printf("%s\n", copy(out, p, 8));           
            p += 8;
        }
        memset(buf, 0, 112);
    }
}

发表于 2016-04-14 21:22:03 回复(9)
 #include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
	string str1;
	string str2;
	while(cin >> str1)
	{
		cin >> str2;
		vector<string>temp;
		temp.push_back(str1);
		temp.push_back(str2);
		for(int i = 0;i <2;i++)
		{
		string t = temp[i];
		int n1 = t.size()/8;
		int n2 = t.size()%8;
		for(int k=0;k<8-n2 && n2>0;k++)
		{
			t +='0';
		}
		if(n2>0)
			n1++;
		for(int j=0;j<n1;j++)
		{
			cout<<t.substr(j*8,8)<<endl;
		}
		}
	}
}

题目要一次输入两个,就两个cin,之后判断若是某个不是8的整数倍,就在字符串后面补齐‘0’,然后利用substr 分段输出就行。蛋疼。。华为这种题目
发表于 2016-04-06 17:07:19 回复(2)
/* 本题思路为先补全字符串到8的整数倍,然后输出
    我是用数组存储字符串的
*/

#include<iostream>
#include<string.h>
using namespace std;

void Output(char a[]) {
	int l = strlen(a);
	int m = l / 8;  //整除数
	int n = l % 8;	//余数
	int i,j;

	//在字符串尾部添加0
	for (i = 0; i < 8 - n && n>0; i++)
		a[l + i] = '0';
	if (n > 0)
		m++;
	for (i = 1; i <= m; i++)
	{
		for (j = 0; j < 8; j++)
			printf("%c", a[8 * (i - 1) + j]);
		printf("\n");
	}
}

int main() {
	char a[200], b[200];

	//循环输入测试用例
	while (cin >> a) {
		cin >> b;
		Output(a);
		Output(b);
	}
}

发表于 2016-08-04 11:01:24 回复(4)
//主要明白substr(起始位置,截取子字符窜个数)函数即可
#include <iostream>
#include <string>
#define MAX_SIZE 100
using namespace std;

void Output(string str);
int main()
{
	string str1;
	string str2;
	cin >> str1 >> str2;
	if (str1.length() > MAX_SIZE||str1.length() < 1||str2.length() > MAX_SIZE||str2.length() < 1)
	{
		cout << "input error!" << endl;
	}
	else
	{
		Output(str1);
		Output(str2);
	}
	return 0;
}

void Output(string str)
{
	int quotient = str.length()/8;
	int remainder = str.length()%8;
	int count = 0;
	for (int i=0;i<quotient;i++)
	{
		string substr = str.substr(count,8);
		cout << substr << endl;
		count += 8;
	}
	if (remainder != 0)
	{
		cout << str.substr(count,remainder);
		for (int i=remainder;i<8;i++)
		{
			cout << "0";
		}
		cout << endl;
	}
}

发表于 2016-03-24 15:11:40 回复(0)
def strprint(string):
    while len(string) > 8:
        print(string[:8])
        string =string[8:]
    print(string +"0"*(8-len(string)))
a =input()
b =input()
strprint(a)
strprint(b)

编辑于 2018-09-04 22:02:24 回复(0)
#include <stdio.h>
#include <string.h>

const int N = 1000;

int main()
{
	char str[N];
	int len, need;
	while (gets(str))
	{
		len = strlen(str);
		for (int i = 0; i < len; i++)
		{
			if ((i + 1) % 8 == 0)
			{
				printf("%c\n", str[i]);
			}	
			else
			{
				printf("%c", str[i]);
			}
		}
		if (len % 8 != 0)
		{
			need = 8 - len % 8;
			for (int i = 0; i < need; i++)
			{
				printf("0");
			}
			printf("\n");
		}
	}
	return 0;
}

发表于 2017-07-07 08:27:21 回复(2)
import java.util.Scanner;
public class Main{
    public static void main(String[]args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextLine()){
            String str1 = in.nextLine();
            String str2 = in.nextLine();
            SpliteString(str1);
            System.out.println();
            SpliteString(str2);
        }
    }
    static void SpliteString(String str){
     	   if(str.length() <= 8){
               for(int i = 0;i < 8;i++)
                   if(i < str.length())
                   	System.out.print(str.charAt(i));
               	   else
                   	System.out.print("0");
           }else{
               for(int i = 0;i < 8;i++){
                   System.out.print(str.charAt(i));
               }
               System.out.println();
               SpliteString(str.substring(8));//递归,再判断除去前8个字符之后的长度是否大于8
           }
	}
}

发表于 2016-07-12 21:58:30 回复(2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main()
{
    int i,length,count;
    char str1[100],str2[100],cstr[9];
    
    while(scanf("%s",str1) != EOF){
       
        length = strlen(str1) ;
        
        for(i = 0; i < length; i++){
            if(i % 8 != 0)
                cstr[count++] = str1[i];            
            else{
                cstr[8] = '\0';
                if(i != 0)
                    printf("%s\n",cstr);
                count = 0;
                cstr[count++] = str1[i];
            }
        }
        while(i % 8 != 0){
            cstr[count++] = '0';
            i++;
        }
        printf("%s\n",cstr);
    }
    
    return 0;
}

发表于 2016-08-31 15:40:01 回复(1)
import java.util.Scanner;
public class Main{
    
   public static void main(String [] args) 
       {
       Scanner sc=new Scanner(System.in);
       String str1=sc.next();
       String str2=sc.next();
       task(str1);
       task(str2);
       sc.close();

   }
    
    
    private static void task(String str)
  {
        int n=str.length();
    
        int l=0;
        if(n%8>0)
            l=8-n%8;
        StringBuilder sb=new StringBuilder(str);
        while(l>0)
            {
            sb.append("0");
            l--;
        }
        
        int i=n/8+1;
        for(int j=0;j<i;j++)
            {
            if(j*8+8<=sb.length())

          { String s= sb.substring(j*8,j*8+8);
            System.out.println(s);
          }
        }
    }

           
    
}通过,no bug!

发表于 2016-01-16 16:11:09 回复(2)
def splitstr(str):
        if(len(str)<=8):
            n = 8- len(str)
            print(str+ '0'*n)
        else:
            print(str[0:8])
            str = str[8:]
            splitstr(str)
a=input('请输入第一个字符串:')
b=input('请输入第二个字符串:')
splitstr(a)
splitstr(b)


发表于 2018-07-25 15:42:57 回复(2)
/* Convert String in String array with element of 8 char length */

#include <stdio.h>

int main()
{
    char input;
    int i = 0;

    while ((input = getchar()) != EOF)
    {
        if (input != '\n')
        {
            putchar(input);
            i++;
        }
        else if (i != 0)
        {
            while (i < 8)
            {
                putchar('0');
                i++;
            }
        }
        /* New line for Next Element in Array */
        if (i == 8)
        {

            putchar('\n');
            i = 0;
        }
    }
    

    return 0;
}

发表于 2020-05-05 12:46:09 回复(0)
#include <string>
#include <iostream>
using namespace std;

int main()
{
 //1.利用string类的  substr方法处理字符串
   string str_in[2];
   cin >> str_in[0] >> str_in[1];
   for(int i = 0; i<2; i++)
   {
       string str = str_in[i];
  //主要明白substr(起始位置,截取子字符窜个数)函数即可
       while (str.size() > 8)
       {
           cout << str.substr(0, 8) << endl; 
           str = str.substr(8); //只有一个数字8表示从下标为8开始一直到结尾
       }
       cout << str.append(8 - str.size(), '0') << endl;
   }
    return 0;
}

发表于 2019-09-14 12:40:39 回复(0)
我的第一个编程成功题目,😂😂😅

看到网上的答案基本没有找到用Python语言完成的,而本人主要使用Python,本来按照我的想法本地编译器通过了,在牛课上也不会通过,但是通过了..........哈哈哈哈哈

还有一个问题:题目说保存到数组,我突然懵逼了,Python的数组怎么定义,然后就
import numpy as np
np.array().........结果就错了
###############代码如下
def inputString():#键盘输入两个字符串
    str1 = str(input())
    str2 = str(input())
    return str1,str2

def splitString():
    s1,s2 = inputString()
    slist = [s1,s2]#用于遍历
    arr = []
    for i in slist:
        if len(i)<=8:
            arr.append(i+'0'*(8-len(i)))#8-len(i)就是补0的个数
        else:
            b=[i[i1:i1+8] for i1 in range(0,len(i),8)]#长度超过8,就将字符串按照8个8个的存放到列表b
            for j in b:#遍历8,前面的肯定都是8为,只有最后一个有可能不够8为
                arr.append(j + '0'*(8-len(j)))#前面够8为的 8-len(j) = 0,‘0’*0啥也没有,最后不够8为了再补0
    return arr
if __name__ == '__main__':
    #ar = splitString()
    for i in splitString():
        print(i)
    
发表于 2019-05-30 21:10:07 回复(0)