C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。
存放在字符数组(char carr[])中,并以空字符结束('\0')。
int main() {
//输出2
string s = "He";
cout << s.size() << endl;
//输出3
char cs[] = "He";
cout << std::end(cs) - std::begin(cs) << endl;
}
操作函数
1. 函数声明位于头文件string.h中
2. 注意,传入的指针必须以空字符作为结束的数组,如果没有以空字符结束(eg, char c[] = {'c', 'a'})将产生错误
#include <string.h>
int main(){
const char carr1[] = "Hello";
const char carr2[] = "Wordl";
//返回C风格字符串长度, 空字符将不计算在内
auto len = strlen(carr1);
//比较两个C风格字符串,如果两字符串相等则返回0;前者大于后者,返回正值;后者大于前者,返回负值
auto comp = strcmp(carr1, carr2);
/*
* strcat和strcpy使用时必须保证前者足够大,能够容纳下计算后的结果
*/
//串联两个字符串,返回前者
strcat(carr1, carr2);
//拷贝字符串,返回前者
strcpy(carr1, carr2);
}
练习题
1. 编写一段程序,比较两个C风格字符串的内容
#include <iostream>
#include <string>
#include <string.h>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main() {
/*
* 定义并初始化两个C风格字符串数组
*/
const char cs1[]= "HelloWorld";
const char cs2[]= "HelloWord";
/*
* 比较两个字符串
*/
if(strcmp(cs1, cs2) > 0)
cout << "cs1 > cs2";
else if(strcmp(cs1, cs2) < 0)
cout << "cs1 < cs2";
else
cout << "cs1 = cs2";
/*
* 比较两个string对象
*/
string s1 = "Hello";
string s2 = "World";
if(s1 < s2){};
}