切分字符串

Description

split是许多编程语言中字符串的常用函数。给定一个字符串和一个分隔符号,split函数能够根据分隔符将原字符串切片。

题目保证给定的原字符串长度不会超过200,分割符长度不会超过10,分割之后的字符串数量不会超过20个。要求输出所有切分后的分割字符串。

Input

两行。第一行为一个字符串,表示原字符串;第二行为一个字符串,表示分割字符串。字符串内的字符可能为大小写字母、数字以及空格。

Outupt

n行,每一行为原字符串根据分隔符切片后的结果。如果为空,则输出空行。

Sample Input

oossoo1oo56oo667oo3124oo41 oo

Sample Output


ss
1
56
667
3124
41

思路:1.新建一个字符数组str【h】,用来装没有分隔字符串sep的的原字符串origin【i】

           2.读取到分隔字符串的第一位就判断是否遇到分隔字符串,若遇到分隔字符串,则将str拷贝入result函数的一行里,清空str重新读取字符串。

           3.用二维数组实现,将分好的字符串装在每一行

           4.当origin【i+1】为‘\0’时,将str拷贝入result函数的一行里

易错点:1.字符串数组要初始化为空,否则会发生数组越界。注意:当用变量给字符串数组定义长度时,无法初始化!

              2.遇到分隔字符串,拷贝完后要继续读取时,注意读取的位置变化:i+=len(sep),h=0

              3.当origin【i+1】为‘\0’时,将str拷贝入result函数的一行里(非常容易忽略掉)

以下为实现代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#define N1 201 
#define N2 11 
#define COUNT 20


int split(char origin[], char sep[],char (*result)[N1]);
int main(void){
    // freopen("test.txt","r",stdin);
    // freopen("ans2.txt","w",stdout);
    char origin[N1];
    char sep[N2];
    char result[COUNT][N1];

    gets(origin);
    gets(sep);
    int n_result = split(origin,sep,result);
    int i;
    for(i=0;i<n_result;i++){
        printf("%s\n",result[i]);
    }
    return 0;
}

int split(char origin[], char sep[],char (*result)[N1]){
	int i=0,j,k,num=0,h=0;
	int len=strlen(sep);
	char str[201]="",a[100]="";

	while(origin[i]){
		if(origin[i]!=sep[0]){
			str[h]=origin[i];
			i++;
			h++;
			if(origin[i+1]=='\0'){
				strcpy(result[num],str);
			}//若字符串准备结束,则录入 
		}else{
			k=i;
			for(j=0;j<len;j++){
		    a[j]=origin[k];
			k++;
		} 
		//puts(a);  
		int ret=strcmp(a,sep);
			if(ret==0){
				num++;
				i=i+len;
				strcpy(result[num-1],str);//拷贝 
				for(j=0;j<h;j++){
		        str[j]='\0';
		} //原来的读取数组清空 
				h=0;//原来数组从0开始读入 
			}else{
				str[h]=origin[i];
				i++;
				h++;
				if(origin[i+1]=='\0'){
				strcpy(result[num],str);
			}
			}
		}
	}
	
	return num+1;
}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值