|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Ranbo_ 于 2020-2-26 13:17 编辑
1.不借用任何字符串库函数实现接受两个字符串,然后把它们连接起来并输出。
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- char str1[110] = {0}, str2[110] = {0};//输入两个字符串,初始化
- char lj[250] = {0};//连接两个字符串,初始化
- while(scanf("%s %s", str1, str2) != EOF)
- {
- int i = 0, j = 0;//i用于str1的复制。并记录str1的长度,j用于继续复制str2
- while(str1[i] != '\0')
- {
- lj[i] = str1[i];
- i++;
- }//结束时将str1完整复制到了lj里,i = strlen(str1)
- while(str2[j] != '\0')
- {
- lj[i] = str2[j];
- i++; j++;
- }
-
- printf("%s\n",lj);
- }
-
- return 0;
- }
复制代码
2.不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来并输出。
- #include <stdio.h>
- #include <stdlib.h>
- /**
- *如果要无冗余,就不能使用数组,需要动态分配内存空间
- */
- int main()
- {
- char *p;//p接受字符串的单个字符
- p = (char *) malloc(sizeof(char));
- while((*p = getchar()) != ' ')
- {
- putchar(*p);
- }//遇到空格退出循环
- while((*p = getchar()) == ' ');//若继续输入空格则一直循环直到输入非空格字符
- putchar(*p);//若p不为空格,此时已经接收了一个第二个字符串的非空格字符,先将其输出
- while((*p = getchar()) != '\n')
- {
- putchar(*p);
- }//继续输出第二个字符串的剩下字符直到输入换行符
- free(p);
- }
复制代码 或者将两个字符串直接连接:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int i = 1, j = 1, k;
- char * p1 = (char *)malloc(sizeof(char));
- char * p2 = (char *)malloc(sizeof(char));
- char p;
- while((p = getchar()) != ' ')
- {
- p1 = (char *)realloc(p1, sizeof(char) * i);//预留一个空间放结束符
- *(p1 + i - 1) = p;
- i++;
- }//输入啥都给p1,直到遇到空格
- p1 = (char *)realloc(p1, sizeof(char) * i);
- *(p1 + i - 1) = '\0';//p1最后一个字符置为'\0'
-
- while((p = getchar()) == ' ');//若继续输入空格则一直循环直到输入非空格字符
- p2 = (char *)realloc(p2, sizeof(char));
- *p2 = p;
- while((p = getchar()) != '\n')
- {
- p2 = (char *)realloc(p2, sizeof(char) * (j + 1));//p2已经有一个字符放进去了,并需要预留一个空间放结束符
- *(p2 + j) = p;
- j++;
- }
- p2 = (char *)realloc(p2, sizeof(char) * (j + 1));
- *(p2 + j) = '\0'; //p2最后一个字符置为'\0'
- p1 = (char *)realloc(p1,sizeof(char) * (i + j + 1));
- for(k = 0; k < j + 1; k++, i++)
- {
- *(p1 + i - 1) = *(p2 + k);
- }//将p2的字符串复制到p1里,覆盖p1的'\0'
- printf("%s", p1);
- free(p1);
- free(p2);
- return 0;
- }
- /*如果默认只有一个空格,那么不需要判断多空格的情况,这个时候稍微改一下j的值可以稍微简化一下程序*/
复制代码
如果默认两个字符串之间只有一个空格:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int i = 1, j = 1, k;
- char * p1 = (char *)malloc(sizeof(char));
- char * p2 = (char *)malloc(sizeof(char));
- char p;
- while((p = getchar()) != ' ')
- {
- p1 = (char *)realloc(p1, sizeof(char) * i);//预留一个空间放结束符
- *(p1 + i - 1) = p;
- i++;
- }//输入啥都给p1,直到遇到空格
- p1 = (char *)realloc(p1, sizeof(char) * i);
- *(p1 + i - 1) = '\0';//p1最后一个字符置为'\0'
-
- while((p = getchar()) != '\n')
- {
- p2 = (char *)realloc(p2, sizeof(char) * (j + 1));//p2已经有一个字符放进去了,并需要预留一个空间放结束符
- *(p2 + j) = p;
- j++;
- }
- p2 = (char *)realloc(p2, sizeof(char) * j);
- *(p2 + j - 1) = '\0'; //p2最后一个字符置为'\0'
- p1 = (char *)realloc(p1,sizeof(char) * (i + j - 1));
- for(k = 0; k < j ; k++, i++)
- {
- *(p1 + i - 1) = *(p2 + k);
- }//将p2的字符串复制到p1里,覆盖p1的'\0'
- printf("%s", p1);
- free(p1);
- free(p2);
- return 0;
- }
复制代码
|
|