文章目录
目的C语言字符基本说明字符串声明与操作字符串常用函数说明属性复制合并替换查询比较类型检查类型转换
C/C++字符串基本说明C++ string和C语言字符串转换C++ string常用方法说明属性类型转换修改查询比较
总结
目的
对于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.h、ctype.h、stdlib.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/
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。