**题目描述
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。
输入
每一行包括两个字符串,长度不超过100。
输出
可能有多组测试数据,对于每组数据,
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来
输出连接后的字符串。
样例输入
abc def
样例输出
abcdef**
无冗余的意思就是动态开辟数组,用到了malloc和realloc函数
//malloc 动态申请一个内存空间 realloc扩大内存空间并且其他内容不变
//字符串末尾加一个’\0’
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i=1,j=1;
char a;
char *p1 = (char*)malloc(sizeof(char));
char *p2 = (char*)malloc(sizeof(char));
while((a = getchar())!=' ')
{
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')
{
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));
int cnt = 0;
for(int k = 0;k<j;k++)
{
p1[i-1+k] = p2[k];
}
printf("%s\n",p1);
return 0;
}
但是不知道为什么时间超限,
ok,暴力
#include <stdio.h>
int main(){
char a[210],b[110];
while(scanf("%s%s",a,b)!=EOF) {
int i;
for(i=0;a[i]!='\0';i++);
for(int j=0;b[j]!='\0';j++){
a[i++]=b[j];
}
a[i]='\0';
puts(a);
}
return 0;
}
多快好省!
本题旨在突出不用任何库函数,包括strlen(),以及无冗余的存储,利用基本的C语言的指针以及字符串存储特性可以解决。但是为什么时间超限了==(暴力真好用)
注意读入字符串需要在末尾+’\0’