字符串的处理

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);
}

注:代码仅供参考,学习过程还需自己独立思考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值