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),那么第一个字符就用来存储字符的长度。
总结:
字符与整数在一定范围内可以相互转换。这个性质可以好好利用。