题目链接:点击打开链接
题目大意:切割字符串,进行重组
题目总结: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;
}
}
}