zoukankan      html  css  js  c++  java
  • 项目开发常见字符串处理模型-字符串反转模型

    用二种方法去实现:

    1 指针二头堵模型。 

    2 利用栈进行递归逆序。

    1 指针二头堵模型

    二个指针p1,p2 分别指向字符串的开头和结尾,然后依次交换字符的值

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    int inverse(char *str1)
    {
      int length = 0;
      char *p1 = NULL;
      char *p2 = NULL;
      if (str1 == NULL)
      {
        return -1;
      }
    length = strlen(str1);
    p1 = str1; //指针指向字符串的开头;
    p2 = str1 + (length - 1); //指针指向字符串的最后一个;
    while (p1 < p2)
    {
      char c = *p1;
      *p1 = *p2;
      *p2 = c;
      ++p1;
      --p2;
    }
    return 0;
    }
    int main(void)
    {
      char buf[] = "abcdefg"; //buf[] //数组内存分配在栈上,可以修改。  如果用指针声明字符串的话,字符串声明在常量区,内存不可修改,程序会报错
      inverse(buf);
      printf("buf:%s ", buf);
      system("pause");
      return 0;

    }

    2 利用栈进行递归逆序

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>

    int inverse_stack(char *str1, char *buf)
    {
      if (str1 == NULL || buf == NULL) //递归结束的异常条件
      {
        return;
      }
      if (*str1 == '')  //递归结束的正常条件
      {
        return;
      }
      inverse_stack(str1 + 1, buf);
      strncat(buf, str1, 1); //到''时递归结束, ''前一个字符为g, 然后是c, b, a
    }
    int main(void)
    {
      char buf[] = "abcg"; 
      char g_buf[1024] = { 0 };
      inverse_stack(buf, g_buf);
      printf("%s", g_buf);
      system("pause");
      return 0;
    }

  • 相关阅读:
    synchronized优化手段:锁膨胀、锁消除、锁粗化和自适应自旋锁...
    synchronized 优化手段之锁膨胀机制!
    synchronized 加锁 this 和 class 的区别!
    SpringBoot中时间格式化的5种方法!
    阿里云ddns shell 脚本
    adb 备份apk
    paddlex_gui_win10(飞浆)
    cuda 版本对照
    PaddleHub
    yum 查找库对应的包
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10264235.html
Copyright © 2011-2022 走看看