在一个字符串中插入另一个字符串(在str1的pos位置插入str2)
- 不可以使用头文件 #include <string.h>
- 不考虑字符数组越界,不考虑中文字符
- 使用c语言
- /*
- 1 <= pos <= str1的长度,返回 flag = 0,否则返回 flag = 1;
- 字符str1数组容量太小时,会出现越界。
- 比如 char str1[10] ; char str2[10]; 这种情况时会越界,可能导致内存非法访问。
- 中文字符是两个字节,下面程序,默认字符数组中只有英文字符。
- 有中文字符会出现乱码。
- */
-
#include <stdio.h>
int insert_string(char *str1, char *str2, int pos)
{
int flag = 0;
if(pos < 1)
{
printf("pos不能小于1,已将pos的值改为1\n");
printf("已将str2插入到str1的第1个元素的后面\n");
pos = 1;
flag = 1;
}
char* p1 = str1 + pos;
char* p2 = str1;
int i = 0;
while(*p2)
{
p2++;
}
if (p2 - p1 <= 0)
{
pos = (int) (p2 - p1 + pos);
p1 = str1 + pos;
printf("pos不能大于str1的长度,str1的长度为%d\n已将pos的值改为%d", pos, pos);
printf("\n已将str2插入到str1的第%d个元素的后面\n", pos);
flag = 1;
}
while(*(str2+i))
{
i++;
}
while(p2 >= p1)
{
*(p2 + i) = *p2;
p2--;
}
while(*str2)
{
*p1 = *str2;
str2++;
p1++;
}
return flag;
}int main()
{
char str1[100] = {0};
char str2[100] = {0};
int pos = 0;
printf("请输入字符串str1\n");
scanf("%s",str1);
printf("请输入字符串str2\n");
scanf("%s",str2);
printf("请输入插入的位置pos,将str2插入到str1的第pos个元素的后面\n");
scanf("%d", &pos);
int re = insert_string(str1, str2, pos);
if(re == 0)
{
printf("已将str2插入到str1的第%d个元素的后面\n",pos);
}
printf("%s\n",str1);
return 0;
}
在一个字符串中插入另一个字符串(在str1的pos位置插入str2)
- 不可以使用库函数
- 不考虑字符数组越界,不考虑中文字符
- 使用c语言
- /*
- 1 <= pos <= str1的长度,返回 flag = 0,否则返回 flag = 1;
- 字符str1数组容量太小时,会出现越界。
- 比如 char str1[10] ; char str2[10]; 这种情况时会越界,可能导致内存非法访问。
- 中文字符是两个字节,下面程序,默认字符数组中只有英文字符。
- 有中文字符会出现乱码。
- */
-
int insert_string(char *str1, char *str2, int pos)
{
int flag = 0;
if(pos < 1)
{
pos = 1;
flag = 1;
}
char* p1 = str1 + pos;
char* p2 = str1;
int i = 0;
while(*p2)
{
p2++;
}
if (p2 - p1 <= 0)
{
pos = (int) (p2 - p1 + pos);
p1 = str1 + pos;
flag = 1;
}
while(*(str2+i))
{
i++;
}
while(p2 >= p1)
{
*(p2 + i) = *p2;
p2--;
}
while(*str2)
{
*p1 = *str2;
str2++;
p1++;
}
return flag;
}int main()
{
char str1[100] = {'a','b','c','d','f','g'};
char str2[100] = {'z','x','c','v'};
int pos = 4;
insert_string(str1, str2, pos);
return 0;
}