游客 Signup | Login
中文 | En

1348 - 算法4-2:字符串连接

将给定的字符串连接起来。书中的算法描述如下:

<p class="MsoNormal" align="center">
	<span style="font-family:宋体;">图:字符串连接算法</span><span></span> 
</p>

Input

三对字符串,每对字符串占一行,用空格隔开。每个字符串只包含数字和英文字母大小写且长度不超过100。

Output

将后一个字符串连接到前一个字符串后面,如果结果字符串长度超过100,输出一行“Result String is cutted.”否则将结果字符串输出来。

Examples

Input

hello acmclub
123 456
doyour best

Output

helloacmclub
123456
doyourbest

Hint

提示:
如果按照书上的算法定义字符串数据结构,其实也可以使用字符数组(长度限制在127),那么第一个字符就用来存储字符的长度。
总结:
字符与整数在一定范围内可以相互转换。这个性质可以好好利用。

Solution C

#include "stdio.h"
#include <string.h>
void catstr(char *des,char *sour)
{
  int end=strlen(des);
  int i,j,num;
  num=strlen(sour);	
	for(i=end,j=0;j<num;i++,j++)
		des[i]=sour[j];
	for(i=0;i<end+num;i++)
	   printf("%c",des[i]);
	printf("\n");
}
void main ()
{
	int i;char s[105],t[105];int m,n;
  for(i=1;i<=3;i++)
  {
      scanf("%s %s",s,t);
m=strlen(s);n=strlen(t);   
if(m+n>100)
      printf("Result String is cutted.\n");
    else
    catstr(s,t);  
  }
	
}

Solution C++

#include <stdio.h>
#include <string.h>

#define MAXSTRLEN 100
typedef char SString[MAXSTRLEN+2];
typedef int Status;
#define TRUE 1
#define FALSE 0

void InputString(SString &str) {
	// 读取字符串
	scanf("%s", str + 1); // 首先用scanf读取字符串
	str[0] = strlen(str + 1); // 求出字符串的长度并保存在str[0]中
}

void PrintString(SString &str) {
	// 	输出字符串
	int i;
	for (i = 1; i <= str[0]; i++) {
		putchar(str[i]);
	}
}

Status Concat(SString &T, SString S1, SString S2) { // 算法4.2
	// 用T返回由S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE。
	int i;
	Status uncut;
	if (S1[0] + S2[0] <= MAXSTRLEN) { // 未截断
		for (i = 1; i <= S1[0]; i++)
			T[i] = S1[i];
		for (i = 1; i <= S2[0]; i++)
			T[i + S1[0]] = S2[i];
		T[0] = S1[0] + S2[0];
		uncut = TRUE;
	} else if (S1[0] < MAXSTRLEN) { // 截断
		for (i = 1; i <= S1[0]; i++)
			T[i] = S1[i];
		for (i = S1[0] + 1; i <= MAXSTRLEN; i++)
			T[i] = S2[i - S1[0]];
		T[0] = MAXSTRLEN;
		uncut = FALSE;
	} else { // 截断(仅取S1)
		for (i = 0; i <= MAXSTRLEN; i++)
			T[i] = S1[i];
		uncut = FALSE;
	}
	return uncut;
} // Concat

int main(){

	int i;
	SString T, S1, S2;
	for(i=0; i<3; i++){		// 处理三组字符串
		InputString(S1);	// 输入字符串
		InputString(S2);
		if(Concat(T, S1, S2)){	// 如果没有被切断则输出连接后的结果
			PrintString(T);
			putchar('\n');
		}else{				// 如果被切断了,则输出相应的提示
			puts("Result String is cutted.");
		}
	}

	return 0;
}

Hint

提示:
如果按照书上的算法定义字符串数据结构,其实也可以使用字符数组(长度限制在127),那么第一个字符就用来存储字符的长度。
总结:
字符与整数在一定范围内可以相互转换。这个性质可以好好利用。
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题