zoukankan      html  css  js  c++  java
  • 【C++】字符串处理

    字符串处理

    标签:c++


    一、输入

    1、 scanf()函数

    格式:scanf(“%s”,arryName)

    注意:录入时遇到空白字符(空格、回车、制表)即结束

    2、 gets()函数

    格式:gets(char *ch)

    注意:

    • 读取整行内容,包括空格和制表,只在遇到回车时结束
    • 只能读取字符数组,不能读string对象

    3、 getchar()函数

    格式:

    int ch[N];(设为char ch[N]也可以)
    while((ch[i++] = getchar()) != 32 && (ch[i++] = getchar()) != '
    ');
    ch[i-1] = '';
    

    注意:

    • 函数获取的是整型,即字符的十进制ASCII码
    • 每次仅读入一个字符,读取字符串时要循环读取,通过循环条件限制读取内容,并在字符串末尾添加’’
    • 空白符ASCII码:空格:32,制表:9,换行:10

    二、输出

    1、 printf()函数

    格式:printf(“格式控制符”,ch)

    2、 puts()函数:

    格式:puts(arryName)

    3、 putchar()函数

    putchar(变量名或者表达式)

    变量可以是字符型或者整型,输出结果一定为字符型

    三、cin()cout()

    1、 基本格式:

    cin>>arryName

    cout<<arryName

    2、 注意:

    • cin遇到空白字符就停止接收,如果后面还有接收语句,则余下的部分被赋值给下一个变量,如果需要接收空格,使用cin.getline(stringName, size)函数,最多只可以读入size-1个字符,多余的不接收
    • 使用getline(cin, str)语句时,必须用getchar()将之前输入的 接收掉!!!否则第一次接收的字符串是空白的
    • cin()/cout()的运行速度比scanf()/printf()慢,尽量减少使用

    四、字符数组和string()对象

    1、 字符数组

    (1) 数组定义:

    char stringName[N];

    cin/scanf/gets读入时末尾自动添’’

    不能用字符数组和字符指针直接赋值,只能用字符串常量赋值

    只要不发生内存溢出,可以任意访问字符数组中的内容,只是内容为乱码

    (2) 字符指针定义:

    char *pStr;

    可以在定义时赋值,也可以在定义后使用前赋值

    赋值方式为:字符串常量、字符数组、字符指针,但不能是string对象

    2、 string对象

    (1) string对象的定义:

    对象:

    string valName;

    如:

    char szString[100] = "huiahgigh";
    char *p1 = "jiahgi";
    string str = "hhuihs";
    string str1 = szString, str2 = p1, str3 = str;
    

    对象数组:

    string arrayName[N];

    定义时可以初始化

    初始化内容为:字符串常量、字符数组、字符指针、string对象

    (2) 输入输出

    1. cin>>stringName;

    char szString[N];
    scanf(“%s”,szString);
    stringName = szString;
    
    char szString[N];
    gets(szString);
    stringName = szString;
    

    (3) 赋值

    可以用字符常量、字符串常量、字符数组、字符指针、string对象进行赋值,不需要考虑长度

    (4) string对象的运算

    支持<,<=,==,>=,>,+,+=,[]运算符,意义同相应的字符串处理函数,string对象比较大小时按照字典顺序比较,大小写相关,大写字母小于小写字母

    (5) string中常用函数

    string对象详解

    to_string(),stoi,stof

    五、字符串处理函数

    1、包含在string.h或者cstring头文件中

    2、 注意函数返回值!!!

    • strlen()函数

      char* str = "12345";
      int len = strlen(str);
      printf("len = %d
      ", len);
      

      该函数是计算字符串长度的函数,但不包含字符串结尾的’’

    • strcat strncat 函数

      char str1[10] = {'1','2','3'};
      char str2[5] = {'x','y','z','w'};
      strcat(str1, str2);//把str2追加到str1的后面
      strncat(str1, str2, sizeof(str1) – strlen(str1) - 1);//把str2追加到str1的后面,最后一个参数是str1剩余的长度。
      printf("string = %s
      ", str1);
      
      • 这两个函数都是拼接字符串的函数。
      • str1一定要有足够的空间来放str2,不然会内存溢出。
      • strncat 函数比 strcat 函数更安全。
    • strcmp strncmp 函数

      char* str1 = "hello";
      char* str2 = "hellojj";
      int result1 = strcmp(str1, str2);//比较两个字符串
      printf("result1 = %d
      ", result1);
      int result2 = strncmp(str1, str2, 5);//最后一个参数代表,比较两个字符串的前n个
      printf("result2 = %d
      ", result2);
      
      • strcmp 函数,如果两个字符串相同,则返回0,否则为非0
      • strncmp 函数,最后一个参数代表比较的前n个字符,如果两个数前n个相同则返回0,否则为非0(大于为正,小于为负)
    • strcpy strncpy 函数

      char strBuf[20] = {0};
      char* str = "hello devbird";
      strcpy(strBuf, str);//将str中的字符串拷贝到strBuf中
      printf("strBuf = %s
      ", strBuf);
      strncpy(strBuf, str, 8);//将str中的前8个字符拷贝到strBuf中
      printf("strBuf = %s
      ", strBuf);
      
      • 两个函数都是拷贝字符串函数,有缓冲区溢出危险。
      • strncpy 最后一个参数代表要拷贝的字符数。
    • sprintf 函数

      char buf[50];
      sprintf(buf, "我有%d块钱!", 100);
      printf("buf = %s
      ", buf);//输出结果:buf = 我有100块钱!
      
      • printf是向屏幕输出一个字符串。
      • sprintf是向char数组输出一个字符串,其他行为和printf一模一样。
      • sprintf也存在缓冲区溢出的问题。
    • strchr 函数

      char* str = "devbird";
      char* result = strchr(str, 'b');
      printf("result = %s
      ", result);//结果:result = bird
      char* res = strchr(str, 'z');
      printf("res = %s
      ", res);//结果:res = (null)
      

      该函数是查找字符的函数,如果能找到则返回当前字符及其后面的字符,否则返回为null

    • strstr 函数

      char* str = "I am a Android developer!";
      char* subStr = "Android";
      char* result = strstr(str, subStr);
      printf("result = %s
      ", result);//结果:result = Android developer!
      

      该函数是查找子字符串,返回值为子字符串第一次出现的位置及其后面的字符串,如果没查找到则返回为NULL

    • strtok 函数

      char str[] = "2016/08/29 20:06:55";
      char* result = strtok(str, "/");
      while (result)
      {
      	printf("result = %s
      ", result);//结果:result = 2016
                                         //     result = 08
                                          //     result = 29 20:06:55
          result = strtok(NULL, "/");
      }
      

      字符在第一次调用时strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL,每次调用成功则返回指向被分割出片段的指针。

    • atoi函数

      char* str = "123";
      int i = atoi(str);
      printf("i = %d
      ", i);//输出:i = 123
      

      该函数是一个将数字字符串转换成int类型的函数。

    • atof 函数

      char* str = "29.3547";
      float f = atof(str);
      printf("f = %f
      ", f);//输出:f = 29.354700
      

      该函数是将一个数字字符串转换成float类型的函数。

    • atol 函数

      char* str = "31465666";
      long l = atof(str);
      printf("ld = %ld
      ", l);//输出:ld = 31465666
      

      该函数是将数字字符串转换成长整型的函数。

  • 相关阅读:
    Eureka 集群搭建
    Eureka 基本使用操作
    服务治理 Eureka基础认识
    docker-compose命令不存在(docker-compose not found)
    用来存放下一条将要执行的指令地址的寄存器是
    从左线性文法构造有限自动机时,通常自动机状态个数比文法非终结符号数多
    现代多数实用编译程序所产生的目标代码都是一种可重定位的指令代码,在运行前必须借助于一个
    js正则表达式验证端口范围(0-65535)
    IDEA新建Spring配置文件的方法
    webpack-dev-server config.js Cannot find module
  • 原文地址:https://www.cnblogs.com/vinnson/p/13451338.html
Copyright © 2011-2022 走看看