当前位置:首页C++程序设计 > 正文

C++中字符数组与字符串的关系

作者:野牛程序员:2023-02-24 14:40:16C++程序设计阅读 2616

在C++中,字符数组和字符串有着密切的关系。字符串实际上是一个字符数组,以空字符 '\\0' 结尾。C++提供了两种表示字符串的方式:字符数组和string类。

  1. 字符数组表示字符串

字符数组是由一组字符组成的连续空间,以空字符 '\\0' 结尾,用于表示字符串。字符数组可以通过初始化和赋值来存储字符串。

char str1[6] = {'h', 'e', 'l', 'l', 'o', '\\0'};   // 字符数组初始化
char str2[6] = "hello";   // 字符数组初始化
char str3[6];
str3[0] = 'h';   // 字符数组赋值
str3[1] = 'e';
str3[2] = 'l';
str3[3] = 'l';
str3[4] = 'o';
str3[5] = '\\0';

使用字符数组时,需要注意以下几点:

  • 字符数组必须以空字符 '\\0' 结尾,否则在使用字符串函数时可能会出现问题。

  • 字符数组的长度应该预留一个空间用于存储空字符 '\\0'。

  • 字符数组不能直接比较大小,需要使用字符串函数来比较。

  1. string类表示字符串

string类是C++标准库提供的一种表示字符串的类,使用起来比字符数组更方便。

#include <string>

std::string str1 = "hello";   // string类初始化
std::string str2;
str2 = "world";   // string类赋值

string类提供了一系列操作字符串的方法,如字符串拼接、查找、截取等,使用起来比字符数组更加灵活。

std::string str3 = str1 + " " + str2;   // 字符串拼接
std::cout << str3 << std::endl;

int pos = str3.find("world");   // 查找子串的位置
std::cout << pos << std::endl;

std::string substr = str3.substr(pos, 5);   // 截取子串
std::cout << substr << std::endl;
在使用字符串函数时,也可以将string类对象转换为字符数组。
char buf[10];
std::string str = "hello";
strcpy(buf, str.c_str());   // 将string类转换为字符数组

以上是C++字符数组和字符串的关系。在实际开发中,应根据具体情况选择合适的表示字符串的方式,以提高程序的效率和可读性。

需要注意的是,在将string类转换为字符数组时,需要使用c_str()函数获取string类内部的字符数组指针,并使用strcpy()函数将其复制到目标字符数组中。另外,目标字符数组的长度要足够大,以便存储整个字符串,包括空字符 '\\0'。

  1. 字符串函数的使用

C++提供了一些标准库函数来操作字符串,这些函数通常以字符串的形式作为参数,并返回字符串或者数字。下面列出一些常用的字符串函数:

  • strlen(str):返回字符串的长度,不包括空字符 '\\0'。

  • strcpy(dest, src):将源字符串复制到目标字符串,包括空字符 '\\0'。

  • strcat(dest, src):将源字符串连接到目标字符串后面,包括空字符 '\\0'。

  • strcmp(str1, str2):比较两个字符串的大小,如果相等返回0,如果str1大于str2返回正数,否则返回负数。

  • strstr(str1, str2):在str1中查找str2第一次出现的位置,返回指向该位置的指针,如果没有找到则返回NULL。

下面是一个使用字符串函数的示例程序:

#include <iostream>
#include <cstring>

int main()
{
    char str1[] = "hello";
    char str2[] = "world";

    std::cout << strlen(str1) << std::endl;
    
    char str3[11];
    strcpy(str3, str1);
    strcat(str3, str2);
    std::cout << str3 << std::endl;

    if (strcmp(str1, str2) > 0) {
        std::cout << "str1 is larger than str2." << std::endl;
    } else {
        std::cout << "str1 is smaller than or equal to str2." << std::endl;
    }

    char* pos = strstr(str3, "world");
    if (pos != NULL) {
        std::cout << "Found \\"world\\" at position " << pos - str3 << std::endl;
    } else {
        std::cout << "Not found." << std::endl;
    }

    return 0;
}

输出结果为:

5
helloworld
str1 is smaller than or equal to str2.
Found "world" at position 5

以上就是C++中字符数组和字符串的关系以及常用操作的介绍,希望对你有所帮助。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击