C++ C风格字符串

C语言风格的字符串(C-style strings)在C++中非常常用。它们以null字符(‘\0’)结尾的字符数组表示,通常用char数组声明。下面我们来看一下C语言风格字符串的一些基本用法。

声明C风格字符串:

char str[10]; // 声明一个可容纳9个字符+1个null字符的数组
strcpy(str, "Hello"); // 用strcpy()函数拷贝字符串

上面的代码声明了一个char数组str,长度为10。然后用strcpy()函数把字符串”Hello”拷贝到该数组中。因为”Hello”包含5个字符,所以还留有剩余空间用于添加null结尾字符’\0’。

读取和打印C风格字符串:

printf("%s", str); // 打印str中的C风格字符串 
char c = str[0]; // 读取第一个字符 
int len = strlen(str); // 获取字符串长度

上面代码演示了打印C风格字符串的格式”%s”,读取单个字符,以及使用strlen()获取字符串长度的方法。

拼接C风格字符串:

strcat(str, " World!"); // 在str后面拼接字符串

strcat()函数可以用来拼接两个C风格字符串。需要注意目标数组的长度要足够容纳拼接后的字符串。

比较C风格字符串:

if (strcmp(str1, str2) == 0) {
  // 字符串相等
} else if (strcmp(str1, str2) < 0) {
  // str1小于str2
} else {
  // str1大于str2
}

strcmp()函数可以用来比较两个C风格字符串的大小。它根据ASCII码顺序逐字符比较,返回负数、0或正数表示第一个字符串较小、相等或较大。

查找子字符串:

char *p = strstr(str, "lo"); // 在str中查找"lo"
if (p) {
  // 找到子字符串
} else {
  // 没找到
}

strstr()函数可以用来在一个C风格字符串中查找一个子字符串。它返回子字符串在源字符串中的起始位置,如果没找到则返回null指针。

转换为C++字符串:

string cppString(str); // 转换为std::string

可以通过构造std::string对象或使用赋值操作,将C风格字符串转换为C++风格的string。

上面讲解了C语言风格字符串的一些基本操作,包括声明、读取、拼接、比较、查找等。掌握这些操作可以让我们更好地处理C++程序中的字符串。

C风格字符串的局限还包括:

  • 长度固定,不方便追加和插入
  • 没有边界检查,容易造成缓冲区溢出
  • 没有记录当前长度,需要手动追踪
  • 没有自动内存管理

所以在C++中通常推荐使用std::string替代C风格字符串,它提供了更多实用的函数,也解决了上述问题。但C风格字符串仍被广泛使用,熟练掌握它们的操作仍很必要。

综上所述,C语言风格的字符串以null结尾字符的char数组表示,可以通过数组索引、指针操作访问和处理字符串,配合一些专门的字符串函数如strcpy、strcat、strcmp等,可以完成如拷贝、拼接、比较等字符串操作。虽然现代C++推荐使用std::string,但掌握C风格字符串的用法仍是必修课。通过本文的介绍和示例代码,希望可以帮助大家更好地理解和使用C++中的C语言风格字符串。