不借用字符串库函数连接字符串
本帖最后由 Ranbo_ 于 2020-2-26 13:17 编辑1.不借用任何字符串库函数实现接受两个字符串,然后把它们连接起来并输出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str1 = {0}, str2 = {0};//输入两个字符串,初始化
char lj = {0};//连接两个字符串,初始化
while(scanf("%s %s", str1, str2) != EOF)
{
int i = 0, j = 0;//i用于str1的复制。并记录str1的长度,j用于继续复制str2
while(str1 != '\0')
{
lj = str1;
i++;
}//结束时将str1完整复制到了lj里,i = strlen(str1)
while(str2 != '\0')
{
lj = str2;
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;
}
页:
[1]