见华科10年保送生上机试题 "1. 不惜用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。" ”无冗余“的含义这里并没有做出解释。我就把它理解为不占用多余的内存空间来存储输入的字符串。 如果直接定义一个数组,无法实现”无冗余“。就想到用动态内存分配函数malloc 和 realloc来实现”无冗余“。 /*实现功能:不借用任何字符串库函数,实现无冗余地接收两个字符串,然后把 它们无冗余的连接起来 */ #include<stdio.h> #include<stdlib.h> int main() { int i=1, j=1, k; char a; char *p1 = (char *)malloc(sizeof(char)); char *p2 = (char *)malloc(sizeof(char)); while( (a=getchar() )!='/n') //无冗余地输入字符串1 { p1 =(char *) realloc(p1, sizeof(char)*i ); *(p1+i-1) = a; i++; } p1 = (char *)realloc(p1, sizeof(char)*i); //为字符串结束标志多开辟一个字节的空间 *(p1+i-1) = '/0'; //添加字符串结束标志 while( (a=getchar() )!='/n') //无冗余地输入字符串2 { p2 =(char *) realloc(p2, sizeof(char)*j ); *(p2+j-1) = a; j++; } p2 = (char *)realloc(p2, sizeof(char)*j); //为字符串结束标志多开辟一个字节的空间 *(p2+j-1) = '/0'; //添加字符串结束标志 p1 = (char *)realloc(p1, sizeof(char)*(i+j-1)); for(k=0;k<j;k++,i++) //将第二个字符串连接到第一个字符串的后面 { *(p1+i-1) = *(p2+k); } printf("%s/n", p1); return 0; }