UVA10361 字符串

题目链接:点击打开链接

题目大意:切割字符串,进行重组

题目总结:1.又忘记了,scanf(“%s”)遇见空格,tab \n都会结束

                    2.gets()直至接受到换行符或EOF时停止。

                    3.getline:在string.h中

              返回值

                   与参数is是一样的

              功能

                   将输入流is中读到的 字符存入str中,直到遇到终结符delim才结束。对于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 '\n'(换     行                符)。数在输入流is中遇到文件结束符(EOF)或者在读入 字符的过程中遇到错误都会结束。
                  在遇到终结符delim后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个 字符开始读入。

                 

          


贴下自己的代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
char data1[150],data2[150],si[5][105];
void copy(int s,int e,int num)//分割下来的字符串重新存储
{
    int j=0;
    for(int i=s;i<=e;i++)
    si[num][j++]=data1[i];
}
void depart(int len)  //分割字符串
{
    int i,num=0,flag=0;
    for(i=0;i<len;i++)
    {
        if(data1[i]=='<')
        break;
    }
    if(i!=num){copy(0,i-1,flag);}
    flag++;
    num=i;//2
    for(i=num;i<len;i++)
    {
        if(data1[i]=='>')
        break;
    }
    if(i!=num+1){copy(num+1,i-1,flag);}
    flag++;
    num=i;//3
    for(i=num;i<len;i++)
    {
        if(data1[i]=='<')
        break;
    }
    if(i!=num+1){copy(num+1,i-1,flag);}
    flag++;
    num=i;//4
    for(i=num;i<len;i++)
    {
        if(data1[i]=='>')
        break;
    }
    if(i!=num+1){copy(num+1,i-1,flag);}
    flag++;
    if(i!=len-1) copy(i+1,len-1,flag);

}

int main()
{
    
    int t,len1,len2;
    scanf("%d",&t);
    getchar();
    while(t--)
    {
        memset(si,'\0',sizeof(si));
        memset(data1,'\0',sizeof(data1));
        memset(data2,'\0',sizeof(data2));
       gets(data1),gets(data2);
       

        len1=strlen(data1);
        len2=strlen(data2);
      
        depart(len1);
        for(int i=0;i<5;i++)
          {
                 if(strlen(si[i]))
                 printf("%s",si[i]);
          }
      printf("\n");
        if(len2!=3)
        {
         for(int j=0;j<len2-3;j++)
         printf("%c",data2[j]);
        }
   
        if(strlen(si[3]))printf("%s",si[3]);
        if(strlen(si[2]))printf("%s",si[2]);
        if(strlen(si[1]))printf("%s",si[1]);
        if(strlen(si[4]))printf("%s",si[4]);
         printf("\n");

    }
    return 0;
}


贴上简单的代码:学习下

/**
 * Author: Gneveek
 * Data: 2011-10-3
 * Descripition:  UVa 10361 - Automatic Poetry
 */ 
#include <stdio.h>
#include <string.h>
#define MAXN 110
void getss(char s[]);
int main()
{
	/*freopen("C:\\in.txt","r",stdin);*/
	int n;
	char s1[MAXN],s2[MAXN],s3[MAXN],s4[MAXN],s5[MAXN],c,line[MAXN];
	scanf("%d",&n);
	c = getchar();
	while(n--)
	{		
		getss(s1);
		getss(s2);
		getss(s3);
		getss(s4);
		getss(s5);
		gets(line);
		line[strlen(line) - 3] = '\0';
		printf("%s%s%s%s%s\n",s1,s2,s3,s4,s5);
		printf("%s%s%s%s%s\n",line,s4,s3,s2,s5);
	}
	return 0;
}

void getss(char s[])
{
	int i;
	for(i=0; i<MAXN; i++)
	{
		if((s[i] = getchar()) == '<' || s[i] == '>' || s[i] == '\n'){
			s[i] = '\0';
			break;
		}
	}	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值