十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#include stdio.h
创新互联是一家专业提供台江企业网站建设,专注与成都网站设计、成都网站制作、H5技术、小程序制作等业务。10年已为台江众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
#include string.h
void catstring(char *str0, int len0, char *str1, int len1, char *str2, int len2)
{
if (len2 = len0 + len1) {
return;
}
memcpy(str2, str0, len0);
memcpy(str2 + len0, str1, len1);
}
int main()
{
char str0[20] = "Golden";
char str1[20] = "View";
char str2[20] = { 0 };
catstring(str0, strlen(str0), str1, strlen(str1), str2, 20);
printf("str2 = %s\n", str2);
return 0;
}
请采纳,谢谢!
#include "stdafx.h"
#include string.h
#include stdio.h
#include stdlib.h
struct STUDENT{
int Number;
char Name[32];
int Class;
float Score;
};
#define IS_WHITE(ch) ((unsigned char)ch=15 || ch==' ')
//trim函数去除字符串str前后的空白字符
char *trim(char *str)
{
char ch;
char *p, *q, *r;
p=str; q=str; r=str-1;
while(1)
{
ch=*p;
if (!IS_WHITE(ch)) break;
if (ch==0) break;
p++;
}
while(1)
{
ch=*p++;
*q=ch;
if (ch==0) break;
if (!IS_WHITE(ch)) r=q;
q++;
}
*++r=0;
return str;
}
int InputStudent(const char *filename)
{
FILE *f;
int n;
char str[200];
struct STUDENT student;
f=fopen(filename,"wb");
if (f==NULL) return 0; //返回0表示失败
for (n=0; ; ++n)
{
printf("请输入学号: "); scanf("%d", student.Number);
if (student.Number==0) break;
while(1)
{
printf("请输入姓名:"); gets(str);
trim(str);
if (str[0]==0) continue; //确保姓名不为空
strncpy(student.Name, str, sizeof(student.Name)-1);
//上句确保输入姓名长度不超过31字节
break;
}
printf("请输入班级:\n"); scanf("%d", student.Class);
printf("请输入成绩:\n"); scanf("%f", student.Score);
fwrite(student, sizeof(student),1, f);
// printf("%08d %-32s %-3d %f\n",
// student.Number,
// student.Name,
// student.Class,
// student.Score);
}
fclose(f);
return n; //返回有多少个学生信息录入
}
void SortStudent(struct STUDENT *student, int n)
{
int i,j;
struct STUDENT *a, *b, t;
for (j=0; jn-1; ++j)
{
a=student+j;
for (i=j+1; in; ++i)
{
b=student+i;
if (a-Number=b-Number) continue; //否则交换
memcpy(t,a,sizeof(struct STUDENT));
memcpy(a,b,sizeof(struct STUDENT));
memcpy(b,t,sizeof(struct STUDENT));
}
}
}
void PrintStudent(const struct STUDENT *student, int n)
{
int i;
for (i=0; in; ++i, ++student)
printf("%08d %-32s %-3d %6.1f\n",
student-Number,
student-Name,
student-Class,
student-Score);
}
void main()
{
int n1, n2, n;
struct STUDENT *student;
const char fn1[]="d:\\student1.bin"; //文件1
const char fn2[]="d:\\student2.bin"; //文件2
const char fn[]="d:\\student.bin"; //合并后的文件
FILE *f;
printf("学生信息录入(录入过程中,学号输入为0,则退出录入)\n");
printf("第一步:%s中的学生信息录入:\n", fn1);
n1=InputStudent(fn1);
if (0==n1)
{
printf("%s中的学生信息录入有误,退出程序\n",fn1);
return;
}
printf("第二步:%s中的学生信息录入:\n", fn2);
n2=InputStudent(fn2);
if (0==n2)
{
printf("%s中的学生信息录入有误,退出程序\n",fn2);
return;
}
printf("第三步:合并%s, %s\n",fn1,fn2);
student=(struct STUDENT *)malloc((n1+n2)*sizeof(struct STUDENT));
f=fopen(fn1,"rb");
if (f==NULL) {printf("%s打开失败,退出程序\n",fn1); return;}
n=fread(student,sizeof(struct STUDENT), n1, f);
fclose(f);
if (n!=n1) {printf("%s读入错误,退出程序\n",fn1); return;}
f=fopen(fn2,"rb");
if (f==NULL) {printf("%s打开失败,退出程序\n",fn2); return;}
n=fread(student+n1,sizeof(struct STUDENT), n2, f);
// PrintStudent(student,n1+n2); //输出学生信息
fclose(f);
if (n!=n2) {printf("%s读入错误,退出程序\n",fn2); return;}
n=n1+n2;
SortStudent(student,n);
f=fopen(fn,"wb");
if (f==NULL) {printf("%s建立失败,退出程序\n",fn); return;}
fwrite(student, sizeof(struct STUDENT), n, f);
fclose(f);
PrintStudent(student,n); //输出学生信息
free(student);
}
int main() {
char a[] = "123456";
char b[] = "abcde";
int buflen = strlen(a) + strlen(b);
char *p = (char*)malloc(buflen + 1);
memset(p, 0, buflen);
printf("%d\n", buflen);
strcpy(p, a);
strcat(p, b);
printf("%s\n", p);
free(p);
}
C的数组在创建后不可变得,因此数组合并的思想就是把数组塞到一个足够大的空间里形成新数组。
上面的函数是比较简单的合并方法
//两个数组合并,参考代码:
#include "stdio.h"
int d=0; //用于记录数组c的大小,和数组c的输出类的一些操作
void main()
{
int a[50],b[50],c[100];
int i,j,k; //i表示a数组的大小 j表示b数组的大小 k用于数组的输出
printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n");
scanf("%d",i);
for(k=0;ki;k++)
scanf("%d",a[k]);
printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n");
scanf("%d",j);
for(k=0;kj;k++)
scanf("%d",b[k]);
void px(int *p,int n); //声明 排序 冒泡法
px(a,i); //调用
px(b,j); //调用
void prin(int *p,int n); //声明 数组的输出函数
prin(a,i);
prin(b,j);
void hb(int *o,int *p,int *q,int m,int n); //声明 两个数组的合并函数 前提:这俩个数组必须是排好序的
hb(c,a,b,i,j);
prin(c,d);
}
void px(int *p,int n) //自定义函数 排序 冒泡法
{int i,j,t,leap;
for(i=0;in-1;i++) //外层循环n-1次,一次循环沉淀一个数
{
leap=0; //leap作为标记,是否两数相换
for(j=0;jn-i-1;j++) //内循环n-i-1次
{
if(p[j]p[j+1]) //比较两个数
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t; //来两个数交换
leap=1; //交换了,标记leap=1
}
}
if(leap==0) break; //经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。
}
}
void prin(int *p,int n) //自定义函数 数组输出函数
{
int k,sum=0;
for(k=0;kn;k++)
{
printf("%d ",p[k]);
sum++;
if(sum%10==0) printf("\n");
}
printf("\n");
}
void hb(int *o,int *p,int *q,int m,int n) //m为p指向数组的大小 n为q指向数组的大小 指针o指向合并的数组
{
int i=0,j=0,k; //i为p指向数组的大小 j为q指向数组的大小
while(1)
{
if(p[i]q[j])
{
o[d]=p[i];
i++;
d++;
}
else
{
o[d]=q[j];
j++;
d++;
}
if(i==m||j==n) break;
}
if(i==m)
{
for(k=j;kn;k++)
{
o[d]=q[k];
d++;
}
}
if(j==n)
{
for(k=i;km;k++)
{
o[d]=p[k];
d++;
}
}
}
首先假设合并函数的功能:将两个两位数的整数 a、b 合并成一个整数放在 c 中。合并的方
式是:将 a 的十位和个位数依次放在 c 数千位和十位上,b 数的十位和个位数依次放在 c 数的个位和百位上。
实现方法如下: