c语言! 编一程序,将两个字符串连接起来,不要用strcat函数.
#include "stdio.h"void main(){ char a[50],b[50],c[50]; int i=0,j=0,k=0;printf("输入第一个字符串");gets(a);printf("输入第二个字符串");gets(b); printf("a=%s
",a); printf("a=%s
",b); while(a[i])c[k++]=a[i++]; while(b[j])c[k++]=b[j++]; c[k]=b[j]; printf("c=%s",c);}已经运行过,有什么问题请留言!
思路:字符串连接先需要找到第一字符串的结束位置,接着把第二字符串元素放到第一字符串后面,最后加上结束标志即可。
参考代码:拼接123和456
#includevoid 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 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语言如何实现。
给你说下这个程序的思路:
“将两个字符串连接起来”
我们就理解为 有两个字符串 str1和str2 ,其中str1的长度 要大于str1自身的长度加上str2的长度。
我们第8行求出了 str1的长度(此程序中就是元素的个数) 即:6 ,那么恰好这个6可以被拿来使用,你应该知道数组的下标是从0开始的吧? 那么利用这个6不就意味着在str1中插入第7个元素么?这样不就可以在str1 的第7个位置插入元素了么?只是这个第7个位置是用一个下标叫6的来代表而已。
12行到16行为第一个for循环,其实这个循环就是整体循环0~5此,我们给定了循环的条件了, 你应该可以看的出来 这个循环的次数就是str2的元素个数,那么这个for循环的6次循环,此时对于str1意味着 要在它后面追加6个元素,对于str2而言意味着取出str2的六个元素。对不对? 其中
i的值变化为:
6 7 8 9 10 11
j的值变化为:
0 1 2 3 4 5
即: str1[6] = str2[0];
str1[6] = str2[0];
str1[7] = str2[1];
str1[8] = str2[2];
str1[9] = str2[3];
str1[10] = str2[4];
str1[11] = str2[5];
第18行利用i的值 此时i=12 因为i是被后戳++运算符号运算的。
总结一下:这里其实抛开算法 就是考你的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之后开始的地方
众岩宁纳: #includevoid main() { char *p1,*p2,s1[100],s2[100]; printf("输入字源符zhidao串1:"); scanf("%s",s1); printf("输入字符串2:"); scanf("%s",s2); for(p1=s1;*p1;p1++); for(p2=s2;*p2;*p1++=*p2++); *p1='\0'; printf("连接后的字符串:%s",s1); }
唐县13182003578: C语言:将两个字符串连接起来. - ?
众岩宁纳: 原发布者:hxk古月#define_CRT_SECURE_NO_WARNINGS#include#include#includevoidmystrcat(char*p,char*q){char*pp=p;while(*pp!='\0'){pp++;}*pp='';while(*q!='\0'){*(++pp)=*(q++);}*(++pp)='\0';}voidmain(){charstr[30]="tracert";charweb[50];...
唐县13182003578: C语言编程:编写一个将两个字符串进行连接的函数. - ?
众岩宁纳: #include void lianjie(char a[],char b[]); { strcat(a,b); printf("%s",a); } main() { char s[40],c[20]; printf("qing shuru 1 zifushuzu:\n"); gets(s); printf("qing shuru 2 zifushuzu:\n") gets(c); lianjie(s,c); }
唐县13182003578: 用C语言编程,输入两个字符串,将这两个字符串连在一起. - ?
众岩宁纳: char str1[50],str2[50]; char *find; char *write; find=str1; write=str2; scanf("%s%s",str1,str2); for(;*(++find);); for(;*find++=*write++;); printf("%s",str1);
唐县13182003578: C语言编程:编一程序,将两个字符串联接起来,不要用Strcat函数. - ?
众岩宁纳: 思路:输入两个字符串a和b,首先找到第一个字符串a的结束位置,接着把b的所有元素放到a的末尾,最后加上结束标志. 参考代码: #include<stdio.h> void mystrcat(char a[],char b[]){int i=0,j=0;while(a[i++]!='\0');//找到a的结束位置i--;...
唐县13182003578: C语言问题 编写一程序将两个字符串连起来 - ?
众岩宁纳: 一、用strcat函数: #include "stdio.h" #include "string.h" int main(int argc,char *argv[]){char a[100]="abcdefg",b[]="1234567";printf("%s\n",strcat(a,b));return 0; }二、不用strcat函数: #include "stdio.h" int main(int argc,char *...
唐县13182003578: C语言编程:5、编一个程序,将两个字符串连接起来,不要用strcat函数. - ?
众岩宁纳: 思路:字符串连接先需要找到第一字符串的结束位置,接着把第二字符串元素放到第一字符串后面,最后加上结束标志即可.参考代码:拼接123和456#include<stdio.h> void mystrcat(char a[],char b[]){//字符串连接函数int i=0,j=0; while(a[i++]!='\0...
唐县13182003578: 用C语言编程:编写一个函数,将两个字符串连接起来 - ?
众岩宁纳: 1234567891011121314 #include "stdio.h" char*mycat(char*a,char*b){ char*aa=a; if(a==NULL || b==NULL) returnNULL; while(*a) a++; while(*a++=*b++); returnaa; } intmain(void){ chars1[100]="12345",s2[]="abcdefghijkl"; printf("%s\n",mycat(s1,s2)); return0; }
唐县13182003578: 用c语言编写程序,将两个字符串连接起来,不要用strcat函数 - ?
众岩宁纳: #include <stdio.h>#include <string.h> void strc(char c1[],char c2[]); void main() { char s1[30]="abc"; char s2[30]="def"; strc(s1,s2); //请在后面补充strc函数的功能,完成两个字符串的连接 puts(s1); } void strc(char c1[],char c2[]) { //请填空,完成两个字符串的连接 int i,j; for(i = 0; c1[i]; i ++); for(j = 0; c2[j]; j ++) c1[i+j] = c2[j]; c1[i+j] = 0; }
唐县13182003578: C语言解答.编写一个程序,将俩个字符串连接起来,不用strcat函数. - ?
众岩宁纳: //函数是以前写的,测试通过,如果有疑问,欢迎交流 //依次输入两个字符串就行 #include #define N 一00 void cur_stract(char *src, char* tar){ int cur_count = 0; while(src[cur_count]!='\0'){ cur_count++; } int tar_cur_count = 0; while(tar[tar_cur_count]!...