zoukankan      html  css  js  c++  java
  • (C/C++学习)14.C语言字符串处理函数(二)

    说明:上节着重解释了字符串处理的库函数处理,这节将针对一些常用的需求,进行非库函数的处理。

    一.去除某一个字符串中的某个字符

     

    1.去除字符串右边的空格

      1 void trimStrRightSpace(char * str)
      2 {
      3     while(*str)
      4         str++;
      5     while(*(--str) == ' ')
      6         *str = '';
      7 }

    2.去除字符串左边的空格

      1 void trimStrLeftSpace(char * str)
      2 {
      3     char *t= str;
      4     if(*t != ' ' )
      5         return;
      6     while(*t ==' ')
      7         t++;
      8     while((*str++ = *t++))
      9         ;
     10 }

    3.去除所有的空格

      1 void trimStrSpace(char *str)
      2 {
      3     char *t = str;
      4     while(*str)
      5     {
      6         if(*str != ' ')
      7             *t++ = *str;
      8         str++;
      9     }
     10     *t='';
     11 }

     

    值得注意的是,可以将上述代码中的空格替换成任意单个字符以实现对某个字符串去掉所有的某个字符的功能,并且可以将最终的字符串返回,如下代码:

      1 char* charremove(char *p)
      2 {
      3     char *t = p;
      4     char *q = p;
      5     while(*t)
      6     {
      7         if(*t != ' ' && *t != '	')
      8             //去除某段字符串中的任意字符
      9             *p++ = *t;
     10         t++;
     11     }
     12     *p = '';
     13     return q;
     14 }

    二.字符串的翻转

    方案1:

      1 void reverse(char *str)
      2 {
      3     char *start = str;
      4     char *end = start + strlen(str)-1;
      5     while(start < end)
      6     {
      7         *start = *start ^*end;
      8         *end = *start ^*end;
      9         *start = *start ^*end;
     10         start++;
     11         end--;
     12     }
     13 }

    方案2:

      1 void reverse(char *str,char*buf)
      2 {
      3     if(*str == '')
      4         return;
      5     reverse(str+1,buf);
      6     strncat(buf,str,1);
      7 }

    三.随机字符串的生成

      1 string generatestring()
      2 {
      3     string str1;
      4     string str("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
      5     int c = (rand()%62);
      6     cout<<c<<endl;
      7     //打印生成字符串中的字符个数
      8     for(int i = 0;i < c;i++)
      9     {
     10         int d = rand()%62;
     11         str1 += str[d];
     12     }
     13     return str1;
     14 }

    如下,要求随机生成 10 个字符串,并对其进行排列,排列规则由 cmp 函数决定(以ASCII 值得大小进行比较)。需要注意的是,利用上述函数生成随机字符串时需要在主函数中调用随机函数种子

      1 #include <iostream>
      2 #include<vector>
      3 #include<algorithm>
      4 #include<time.h>
      5 using namespace std;
      6 
      7 string generatestring()
      8 {
      9     string str1;
     10     string str("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
     11     int c = (rand()%62);
     12     cout<<c<<endl;
     13     for(int i = 0;i < c;i++)
     14     {
     15         int d = rand()%62;
     16         str1 += str[d];
     17     }
     18     return str1;
     19 }
     20 
     21 bool cmp(string a, string b)
     22 {
     23     return  a < b;
     24 }
     25 
     26 int main()
     27 {
     28     srand(time(NULL));
     29     string str1,str2;
     30     vector<string> vec(10);
     31     generate(vec.begin(),vec.end(),[](){return generatestring();});
     32     sort(vec.begin(),vec.end(),cmp);
     33     for(string it:vec)
     34         cout<<it<<"
    ";
     35     return 0;
     36 }
     37 
    查看代码
  • 相关阅读:
    如何保证 Redis 缓存与数据库双写一致性?
    如何合理地估算线程池大小?
    不用装工具,一条 Linux 命令就能实现文件上传下载!
    看了 Google 大神 Jeff Dean 的传说,我拜服了~
    div设置水平垂直居中
    "起用"与"启用"
    徇私舞弊
    精选排比金句20例
    一笔画图推
    一笔画
  • 原文地址:https://www.cnblogs.com/tuihou/p/9818868.html
Copyright © 2011-2022 走看看