C和C++中字符串说明与记录

2023-10-29

目的

对于C和C++字符及字符串我以前接触的少,很多概念方法等并不是很明晰,在此做个笔记梳理下相关内容。

C语言

字符基本说明

对于计算机来说本身并不存在字符(char)这种东西,计算机存储的只是一个个的值,但是单纯的值对于我们来说并不适合表达阅读信息,所以人为的将值和字母符号等联系起来,常见的比如ASCII码。ASCII码将0~127的值对应为英语环境下的字母符号等,见下图:
在这里插入图片描述http://www.asciima.com/

字符基本声明与使用可以看下图,注意单个字符用单引号''包围:
在这里插入图片描述
根据上面说明和演示可以知道单个的char其实就是将值换了个形式表达,所以单个的char之间是可以进行大小比较以及加减乘除等各类运算的,其本质还是数值间运算。

字符串声明与操作

在C语言中的字符串是以结束符\0为结尾的字符数组,可以用下面方式声明:

char s1[6] = {'a','b','c','d','e','\0'};
char s2[6] = "ABCDE"; //同上面的方法,该方式声明时会在结尾自动补上'\0',所以长度也为6
char *s3 = "12345"; //理论上同char s3[6] = "12345";但实际使用时根据环境不同“12345”有可能会是无法修改的只读数据,所以常见的还会在前面加上const显性表示只读数据用
                    //同样的字符串以'\0'结尾,所以s3长度也为6; 
char s4[6] = {'1', '2', '\0', '4', '5', '\0'}; //这里中间出现了'\0',所以当字符串使用时表示"12"
char s5[] = {'a','b','c','d','e','\0'}; //同s1
char s6[] = "ABCDE"; //同s2

字符串基本使用见下图:
在这里插入图片描述
注意:字符串是一种字符数组,但字符数组并不一定是字符串,关键在于有没有’\0’。

字符串常用函数说明

字符串相关的函数非常多,这里只列举些常用的,注意有些函数需要包含头文件string.hctype.hstdlib.h

属性

  • size_t strlen(const char *str)
    返回字符串长度(不包含结束符\0

复制

  • char *strcpy(char *dest, const char *src)
    把 src 所指向的字符串复制到 dest;
  • char *strncpy(char *dest, const char *src, size_t n)
    把 src 所指向的字符串复制到 dest,最多复制 n 个字符;

合并

  • char *strcat(char *dest, const char *src)
    dest去掉结束符,并在后面加上src,该函数会自动补\0
  • char *strncat(char *dest, const char *src, size_t n)
    dest去掉结束符,并在后面加上src的最多n个字符,该函数会自动补\0

替换

  • char *strupr(char *s)
    将字符串s中的字符变为大写;
  • char *strlwr(char *s)
    将字符串s中的字符变为小写;
  • int tolower ( int c )
    将大写字母转换为小写;
  • int toupper ( int c )
    将小写字母转换为大写;

查询

  • char *strchr(const char *str, int c)
    返回str指向的字符串中第一次出现字符c的位置,如果没有则返回null(\0);
  • char *strrchr(const char *str, int c)
    返回str指向的字符串中最后一次出现字符c的位置,如果没有则返回null(\0);
  • char *strstr(const char *haystack, const char *needle)
    在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置,如果没有则返回null(\0);

比较

  • int strcmp(const char *str1, const char *str2)
    把 str1 所指向的字符串和 str2 所指向的字符串进行比较,str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数
  • int strncmp(const char *str1, const char *str2, size_t n)
    从头开始比较 str1 和 str2 最多 n 个字符,返回结果同上;

类型检查

  • int isalpha ( int c )
    判断字符是否为字母,返回非0为真,返回0为假;
  • int isdigit ( int c )
    判断字符是否为十进制数字;
  • int isxdigit ( int c )
    判断字符是否为十六进制数字;
  • int islower ( int c )
    判断字符是否为小写字母;
  • int isupper ( int c )
    判断字符是否为大写字母;

类型转换

  • char *itoa( int value, char *string,int radix)
    将整型转换为字符串,参数分别为欲转换数据,目标地址,进制(2、8、10、16等);
  • char *ltoa( int value, char *string,int radix)
    将长整型转换为字符串,其他同上;
  • int atoi(const char *str)
    把参数 str 所指向的字符串转换为一个整型,如果无法转换则返回0;
  • long int atol(const char *str)
    把参数 str 所指向的字符串转换为一个长整型,如果无法转换则返回0;

C/C++

字符串基本说明

C++向下兼容C语言,所以可以按C语言来使用操作字符串(C语言中string.h库在C++里推荐使用cstring代替),另外C++ namespace std中有string类,可以使用string对象。string对象的加入使操作字符串变得方便许多,可以直接进行赋值与加法操作或是比较操作,使用示例见下面代码:

#include <iostream>
#include <string> //引入头文件

using namespace std;

int main()
{
    string str1;  //声明了一个空字符串
    str1 = "12345"; //赋值
    cout << "str1: " << str1 << endl; //打印输出

    string str2("abcde"); //声明一个字符串
    cout << "str2: " << str2 << endl; //打印输出

    string str3("abcde", 3); //声明一个从输入字符串中从头开始取3个字符的字符串
    cout << "str3: " << str3 << endl; //打印输出

    string str4(str1, 1, 2); //声明一个从输入字符串中下标1开始两个字符的字符串
    cout << "str4: " << str4 << endl; //打印输出

    string str5(5, 'E'); //声明一个由5个E组成的字符串
    cout << "str5: " << str5 << endl; //打印输出

    cout << "str1 + str2: " << str1 + str2 << endl; //string加法

    if(str1 == "12345") //比较
    {
        cout << "str1 == \"12345\": " << "true" << endl;
    }

    if(str1 > str5) //比较
    {
        cout << "str1 > str5: " << "true" << endl;
    }
    else
    {
        cout << "str1 > str5: " << "false" << endl;
    }

    //字符串的比较是从左到右依次进行,直到得出结果

    return 0;
}

上面代码运行结果如下:
在这里插入图片描述

C++ string和C语言字符串转换

C语言字符串转为C++ string:

const char *ch = "hello"; //或者 char ch[] = "hello";
string str1(ch); //转换方法1
string str2 = ch; //转换方法2

C++ string转为C语言字符串:

string str("hello");
const char *ch = str.c_str(); //string转c语言字符串

C++ string常用方法说明

字符串相关的方法非常多,这里只列举些常用的(很多方法都有非常多的重载,这里不一一列出),注意有些方法需要用到string库。

属性

  • int size()const
    返回当前字符串长度,同int length()const
  • bool empty()const
    返回当前字符串时候为空;
  • void resize(int len,char c)
    把字符串重置为len长度,长度边长的用字符c补充(选填);

类型转换

  • int stoi (const string& str, size_t* idx = 0, int base = 10)
    将数值形式的字符串转换为整型,输入参数分别为字符串、起始位置下标、进制(2、8、10、16等);
  • long stol (const string& str, size_t* idx = 0, int base = 10)
    将数值形式的字符串转换为长整型;
  • to_string()
    将各种数值类型转换为string;

修改

  • append()
    在字符串后面增加字符或字符串;
  • insert()
    向字符串插入字符或字符串;
  • erase()
    从字符串中删除某些或某部分;
  • replace()
    替换字符串中某些或某部分;

查询

  • find()
    正向查询字符串中的内容出现位置;
  • rfind()
    反向查询字符串中的内容出现位置;

比较

  • compare()
    字符串间比较;

总结

字符串在上位机开发中是经常会用到的,了解相关内容还是蛮有必要的。

更多内容参考如下:
http://c.biancheng.net/view/1832.html
http://c.biancheng.net/view/1834.html
http://www.cplusplus.com/reference/cstring/
http://c.biancheng.net/view/2236.html
http://c.biancheng.net/view/400.html
http://www.cplusplus.com/reference/string/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C和C++中字符串说明与记录 的相关文章

随机推荐

  • 共识算法 —— PoA

    定义 PoA的全称是 Proof Of Authority 权威证明 网上有些文章全称写得是 Proof Of Activity 个人感觉明显不对 大家自行鉴别 最早提出人是Ethereum 以太坊前技术专家Gavin Wood 在2017
  • hive小文件过多问题解决方法

    小文件产生原因 hive 中的小文件肯定是向 hive 表中导入数据时产生 所以先看下向 hive 中导入数据的几种方式 直接向表中插入数据 insert into table A values 1 zhangsan 88 2 lisi 6
  • 如此优雅,4款 Python 自动数据分析神器真香啊

    我们做数据分析 在第一次拿到数据集的时候 一般会用统计学或可视化方法来了解原始数据 比如了解列数 行数 取值分布 缺失值 列之间的相关关系等等 这个过程我们叫做 EDA Exploratory Data Analysis 探索性数据分析 用
  • 一文看懂什么是区块链分叉

    一些链上资产采用的工作量证明机制 就是让矿工互相竞争求解一个数学题 谁先解出来了 他就大喊一声 我的工作量证明成功了 你们快来看 全体矿工就都过来把那一页目抄写一份 贴在自己账本的最后面 然后又开始新的记账过程 在这个过程中 经常会出现这样
  • 通俗易懂----C语言时间日期与时间戳互相转化

    前言 如果你也对时间转化的高效代码而苦恼 不妨看看以下内容 一定会给你带来良好的体验和启迪 1 时间戳含义 1 1时间戳是衡量时间的一种标准 用来特定电子数据提供一个绑定时间戳 从而有效地证明该电子数据的产生时间及未被修改 常用于保 防伪等
  • 前端小作业~基础知识点串接

    包子们 这次网页虽然不难 但是扣细节的地方多啊 都是最近学的零零散散的知识的拼接与整合 也是尽力而为了 搞了将近四个小时
  • R语言常用快捷键1

    快捷键 1赋值符号 lt alt 2管道符 gt Ctrl Shift M 3注释 Ctrl Shift C 4默认颜色 5折叠所有代码 alt o 6展开所有代码 shift alt o 7添加代码块 Ctrl alt i 1赋值符号 l
  • [从零学习汇编语言] - 转移指令进阶

    文章目录 前言 回顾 1 转移指令原理 2 已接触过的操作符 3 寄存器回顾 通用数据处理寄存器 指针寄存器 变址寄存器 段地址寄存器 其他寄存器 一 ret及retf 1 1 ret指令 1 2 retf指令 1 3 小练习 二 Call
  • Clannad【2018四川省赛】【AC自动机 + DP】

    题目链接 第十届四川省赛C题 挺好的一道题 就是要做一个last优化 每次的last要返回到之前的有值节点 也就是单词的尾的对应节点 然后就不会超时了 呜呜呜 之前一直超时 以为是初始化的memset 问题 以前被卡过memset 然后发现
  • 【cdk的使用】C语言 一个仅用200行代码实现的logger系统 使用

    Github地址 https github com wujin1989 cdk 经常有人说 一个好的代码 不需要记录太多的log 确实 我信了 这也导致cdk也是基于这点出发的 所以cdk的logger系统很简单 仅仅200行左右代码 但是
  • [转]新一代 Linux 文件系统 btrfs 简介

    刘 明 ovis poly sina com 软件工程师 上海交通大学电子与通信工程系 2009 年 8 月 20 日 Btrfs 被称为是下一代 Linux 文件系统 近年来 ext2 3 遇到越来越多的扩展性问题 在期待 ext4 的同
  • 网编(20):UDP传输数据经常遇到的问题

    相对于TCP 协议的程序设计 UDP 协议的程序虽然程序设计的环节要少一些 但是由于UDP 协议缺少流量控制等机制 容易出现一些难以解决的问题 UDP 的报文丢失 报文乱序 connect 函数 流量控制 外出网络接口的选择等是比较容易出现
  • 简单谈谈weex、nvue和vue

    1 区别 weex we except 自己的理解 支持原生和vue并写 原生渲染 但是组件库不完善 仅支持编写app nvue嵌入了weex引擎 又有uniapp丰富的组件库 相当于dcloud写的weex升级版 在uniapp中支持使用
  • 把xml转为成javaBean javaBean转为成xml

    1 先定义javaBean package com wutka jox test import com wutka jox import java util public class TestBean implements java io
  • 【满分】【华为OD机试真题2023 JS】计算网络信号

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 计算网络信号 知识点广搜数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 网络信号经过传递会逐层衰减 且遇到阻隔物无法直接穿透 在此情况下需要计算某个位置的网
  • Selenium成长之路-09简单对象定位之link text方法

    有的时候 我们需要操作的元素是一个文字链接 那么我们可以通过 linktext 或 partiallinktext 进行元素 定位 今天我们先来介绍link text元素定位 百度首页上面的 新闻 hao123 地图 等就可以使用link
  • 用Go语言开发以太坊合约

    转发请注明出处 https blog csdn net ahy231 article details 114112638 序 网上关于 go 语言开发 DApp 的教程较少 因此我只能通过官方文档来系统学习 go 语言的 DApp 开发 这
  • MacOS13+系统运行Stable Diffusion出现的问题及解决方法汇总

    目录 先睹为快 开发环境 问题一 点 生成 按钮就退出程序 问题二 生成的图片是马赛克 第一步 解决环境问题 第二步 更新指定的torch版本包 步骤一 更新指定的torch包 步骤二 重新安装pytorch nightly版本的包 问题三
  • 解决虚拟机VM和WSL2切换问题

    操作环境 windows11 虚拟机 wsl2用的都是Ubuntu 18 04 问题描述 因为之前一直使用wsl2 很久没有使用VM虚拟机 今天打开的时候发现VM不能用了 于是查资料发现用VM和wsl2会冲突 解决办法 首先说一下怎么从之前
  • C和C++中字符串说明与记录

    文章目录 目的 C语言 字符基本说明 字符串声明与操作 字符串常用函数说明 属性 复制 合并 替换 查询 比较 类型检查 类型转换 C C 字符串基本说明 C string和C语言字符串转换 C string常用方法说明 属性 类型转换 修