c语言! 编一程序,将两个字符串连接起来,不要用strcat函数. C语言编程:5、编一个程序,将两个字符串连接起来,不要用st...

C\u8bed\u8a00\u7f16\u5199\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u5c06\u4e24\u4e2a\u5b57\u7b26\u4e32\u8fde\u63a5\u8d77\u6765,\u4e0d\u8981\u4f7f\u7528strcat\u51fd\u6570

#include "stdio.h"void main(){ char a[50],b[50],c[50]; int i=0,j=0,k=0;printf("\u8f93\u5165\u7b2c\u4e00\u4e2a\u5b57\u7b26\u4e32");gets(a);printf("\u8f93\u5165\u7b2c\u4e8c\u4e2a\u5b57\u7b26\u4e32");gets(b); printf("a=%s\n",a); printf("a=%s\n",b); while(a[i])c[k++]=a[i++]; while(b[j])c[k++]=b[j++]; c[k]=b[j]; printf("c=%s",c);}\u5df2\u7ecf\u8fd0\u884c\u8fc7\uff0c\u6709\u4ec0\u4e48\u95ee\u9898\u8bf7\u7559\u8a00\uff01

\u601d\u8def\uff1a\u5b57\u7b26\u4e32\u8fde\u63a5\u5148\u9700\u8981\u627e\u5230\u7b2c\u4e00\u5b57\u7b26\u4e32\u7684\u7ed3\u675f\u4f4d\u7f6e\uff0c\u63a5\u7740\u628a\u7b2c\u4e8c\u5b57\u7b26\u4e32\u5143\u7d20\u653e\u5230\u7b2c\u4e00\u5b57\u7b26\u4e32\u540e\u9762\uff0c\u6700\u540e\u52a0\u4e0a\u7ed3\u675f\u6807\u5fd7\u5373\u53ef\u3002
\u53c2\u8003\u4ee3\u7801\uff1a\u62fc\u63a5123\u548c456
#includevoid mystrcat(char a[],char b[]){//\u5b57\u7b26\u4e32\u8fde\u63a5\u51fd\u6570 int i=0,j=0;while(a[i++]!='\0');//\u627e\u5230a\u7684\u7ed3\u675f\u4f4d\u7f6e i--;while(b[j]!='\0'){//\u628ab\u5143\u7d20\u8d4b\u503c\u5230a\u4e2d a[i++]=b[j++];} a[i]='\0';//\u52a0\u4e0a\u7ed3\u675f\u6807\u5fd7 }int main(){char a[100],b[100];scanf("%s%s",a,b);mystrcat(a,b);puts(a); return 0;}/*\u8fd0\u884c\u7ed3\u679c\uff1a123 456123456*/

思路:字符串连接先需要找到第一字符串的结束位置,接着把第二字符串元素放到第一字符串后面,最后加上结束标志即可。

参考代码:拼接123和456

#include<stdio.h>
void mystrcat(char a[],char b[]){//字符串连接函数 
int i=0,j=0;
while(a[i++]!='\0');//找到a的结束位置 
i--;
while(b[j]!='\0'){//把b元素赋值到a中 
a[i++]=b[j++];

a[i]='\0';//加上结束标志 
}
int main()
{
char a[100],b[100];
scanf("%s%s",a,b);
mystrcat(a,b);
puts(a); 
return 0;
}
/*
运行结果:
123 456
123456
*/


#include<stdio.h>
#include<string.h>
int main(void) {

char str1 [20]={'a','b','c','d','e','f'};//20个空间足以把str2和它合在一起 
    char str2 [6] = {'1','2','3','4','5','6'};
    
    int i = strlen(str1); //strlen时候一个函数,此函数能得出str1的长度 这里的长度是指元素的个数 即:6 
    
    int j;
    
    for(j = 0; j < 6; j++) { // 一共会循环 0~5 即:6次 (这也是为取出str2中的每个元素做循环的) 
    
     str1[i++] = str2[j]; //其中i++ 意味着i的值从 6~(6+5) = 6~11 而这个 6~11 就可以作为str1的后面的数组空位下标来使用 
    
}

str1[i] = '\0';//最后补上 结束符号。 此符号是告诉编译器此字符串到此结束。因
//为此时的i = 12而str1加上str2后str1的长度是12 那么下标为12的 就是str1的最后一个元素的下一个位置 


for(i = 0; i < strlen(str1); i++) {  //输出str1的所有元素 
printf("%c", str1[i]);
}
    
return 0;
}

运行结果:

a       b       c       d       e       f       1       2       3       4        5       6

我们看到了 str1 保存了和str2连接后的所有元素,前提是保证str1的空间足够大。

这个程序没什么难度的,就是一个足够大的数组 然后把另一个数组的所有元素依次加入到这个大的数组中, 仔细想想这个和现实社会中的好多现象不都是一样的道理吗?

首先你得有思路, 然后你就考虑用c语言如何实现。

给你说下这个程序的思路:

“将两个字符串连接起来”


总结一下:这里其实抛开算法 就是考你的c的数组下标和元素序数的关系, (一般我们的思维是觉得开头是从1开始的而数组下标是从0开始的,)

老师一定会告诉你们:“数组的下标是从0开始的,所以第n个元素的下标是n-1”

例如str1中第3个元素‘c’的下标为2  (这句话的3是我们一般意义上的123456······

而其中的2 是数组中的012345·······) 所以不要混淆。

最后for循环输出str1中的所有元素,结果完全没问题。

如果还是不明白,你就自己画图理解吧。。。。

思维的转变是从 对需要被转变的事物和要理解的新事物思维的认识开始的····· 

希望帮助到你。



第一处while循环语句,使i的值为str1数组的末尾下标。指向了最后系统所加的那个空字符‘\0’

第2处while循环语句
其中循环的条件同时也完成了循环体的任务,如果str2字符串数组没有结束的话,就将字符付给str1字符串数组,然后i++,接着判断str2是否结束,没有结束的话,继续给str1赋值。这样最终便完成了将str2这个字符串数组的每一个字符赋给str1的目的

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

char *mystrcat(char *s1,char *s2)

{char *p,*q;

q=p=(char*)malloc(strlen(s1)+strlen(s2)+1);

for(;*s1;)*p++=*s1++;

for(;*s2;)*p++=*s2++;

*p='\0';

return q;

}

int main()

{char s1[]="Good ",s2[]="Morning!";

printf("%s
",mystrcat(s1,s2));

return 0;

}



第一个while是逐渐增加i,知道i指向结束符\0,然后退回去一个,这时候i值指向最后一个元素

第二个while复制str2到str1中从i之后开始的地方

扩展阅读:c++编程 ... c#编辑器 ... c语言程序设计知识点总结 ... c#一般用来开发什么 ... c语言符号大全表解释 ... c语言零基础自学 ... c语言入门程序 ... 简单通讯录系统c语言 ... c语言程序回文数怎么编 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网