1、字符串插入。例:str1 ="123456789", str2="abc", 位置=3,实现:str1 = "123abc456789"。
思路:
1、先计算字符串的长度,利用函数strlen
2、利用指针,将被插入字符串的指针移到最后,利用字符串一的长度移动;为防止字符串1的指针进行变化,额外定义一个指针,让他等于字符串1的指针;
3、利用for循环进行移动指针至插入位置;同时给新指针移动字符串二的长度,此时插入位置会多出等于字符串二的空间大小;
4、利用for循环在多余空间插入字符串二;
代码如下:
char *insert(char *str1, char *str2, int n)
{
assert(NULL != str1);
assert(NULL != str2);
char *ps = str1;
int len_str1 = strlen(str1);
int len_str2 = strlen(str2);
ps = str1 + len_str1;
int i;
for (i = len_str1; i >= n; i--) {
*(ps + len_str2) = *(ps);
ps--;
}
ps = str1;
ps = ps+n;
for (i = 0; i < len_str2; i++) {
*ps = *str2;
ps++;
str2++;
}
return str1;
}
最后在main函数里面调用即可;
int main(void)
{
char str1[MAX];
char str2[MIN];
int n;
char *newstr;
printf("请输入第一个字符串:");
gets(str1);
printf("请输入第二个字符串:");
gets(str2);
printf("请输入插入的位置:");
scanf("%d", &n);
newstr = insert(str1, str2, n);
puts(newstr);
return 0;
}
2、用指针实现strcmp、strcat函数。
自定义一个函数,取名为mystrcmp来实现字符串的比较:
strcmp思路:
利用while循环进行遍历 满足*str1!= '\0' 或者 *str2 != '\0';
然后利用条件判断比较*str1 和 *str2 即可;
代码如下:
int mystrcmp(const char *str1,const char *str2) {
assert(NULL != str1);
assert(NULL != str2);
int i = 0;
while (*str1 != '\0' || *str2 != '\0')
{
if (*(str1) < *(str2))
{
return -1;
}
else if (*(str1) > *(str2))
{
return 1;
}
//
str1++;
str2++;
}
return 0;
}
strcat思路:
自定义一个函数,取名为mystrcat来实现字符串的拼接
为防止字符串的指针进行变化,额外定义一个指针,让他等于字符串的指针;
char *pc = str1;
先利用while循环对pc遍历(*pc != '\0'),然后pc自增
再遍历str2,(*str2 != '\0'),让*pc = *str2,两者自增
因为遍历过程中没有’\0‘,因此再循环结束后赋值
*pc = '\0';
最后返回str1即可;
代码如下:
char *mystrcat( char *str1, char *str2) {
assert(NULL != str1);
assert(NULL != str2);
int i,j;
char *pc = str1;
while (*pc != '\0')
{
pc++;
}
while (*str2 != '\0')
{
*pc = *str2;
pc++;
str2++;
}
*pc = '\0';
return str1;
}
最后在main函数中分别调用两个函数即可:
int main()
{
char str1[MAX];
char str2[MIN];
printf("请输入str1\n");
gets(str1);
printf("请输入str2\n");
gets(str2);
int ret = mystrcmp(str1,str2);
if(ret<0)
{
printf("str1小于str2|\n");
} else if(ret > 0)
{
printf("str1大于str2|\n");
} else
{
printf("str1等于str2|\n");
}
char *p = mystrcat(str1,str2);
printf("拼接后的字符串为:%s\n",p);
}
注:代码仅供参考,学习过程还需自己独立思考