0
点赞
收藏
分享

微信扫一扫

【小程序】小程序如何适配手机屏幕

腾讯优测 2024-05-15 阅读 6

文章目录

22. 字符串

22.1. 字符数组 vs 字符指针 vs 常量字符指针 vs string

  • 字符数组 char[]
    • 它将常量字符拷贝到自己的内存空间,再进行读写操作。
    • 它的大小在编译时确定,且固定大小。
  • 字符指针 char*
    • 它指向常量字符的内存空间,不能修改字符串。
    • 只有为它动态分配内存,才能修改。
  • 常量字符指针 const char*
    • 指向常量字符的指针,不能修改字符串内容。
    • 【注意】 如果是 char* 或 char[] 隐式转换成 const char* ,只是不能通过const char* 去修改,可能存在安全隐患。示例如下。
  • string 是C++标准字符串类,封装了字符串的操作和管理。
int main() {

    char c1[] = "hello";
    c1[0] = 'a';

    char* p1 = "hello";
    p1[0] = 'a'; //报错,尝试修改常量字符

    char* p2 = new char[10];
    strcpy(p2, "hello");
    p2[0] = 'a';

    const char* c = p2;  //char* 隐式转换成 const char*
    c[0] = 'b';  //报错,尝试修改常量字符
    p2[0] = 'b';  
    cout << c << endl;  //输出bello
    cout << p2 << endl; //输出bello

	delete[] p2;
    return 0;
}

22.2. strcpy vs sprintf vs memcpy

  • 相同:都可以拷贝。
  • 区别
    • strcpy是字符串之间的拷贝。
    • sprintf是其他数据类型到字符串的转化。
    • memcpy是内存块间的拷贝。
    • 另外,执行效率,memcpy > strcpy > sprintf。示例如下。
struct Person
{
	char name[20];
	int age;
};

int main() {

    char data[100];
    strcpy(data, "hello");

    int num = 1234;
    sprintf(data, "%d", num);

    Person person = { "John",30 };
    memcpy(data, &person, sizeof(Person));

    return 0;
}

22.3. strlen vs length vs size vs sizeof

  • 相同:都是获取大小。
  • 区别
    • strlen位于头文件 < cstring >,获取const char* 长度,包括 char*,char[],因为它们可以隐式转换成const char*。
    • length获取string长度。
    • size除了获取string长度,还可以获取容器长度。
    • sizeof获取对象或类型大小,以字节为单位。示例如下。
int main() {
    const char* ctr = "Hello";
    cout << strlen(ctr) << endl; //输出5
    cout << sizeof(ctr) << endl; //输出4,在32位环境下,指针占4B

    string str = "Hello";
    cout << str.length() << endl; //输出5
    cout << str.size() << endl; //输出5,length和size对string来说没区别
    
    return 0;
}

22.4. 字符串之间的转换

  • string 转 const char*,使用c_str()。
  • const char* 转 char[],使用strcpy()。
  • string 转 char[],使用strcpy(c_str())。
  • const char*,char*, char[] 转 string,直接赋值。
  • char*, char[] 转 const char*,隐式转换。

22.5 其他数据类型与字符串之间的转换

  • const char* 转 int、long和double,分别使用atoi、atol、atof。
  • string 转 int、long、long long、float、double、long double,分别使用stoi、stol、stoll、stof、stod、stold。
  • 数值类型 转 string,使用to_string。

22.6 字符串分割

  • 使用","分割字符串,示例如下。
int main() {

    char str[] = "apple,banana,orange,grape";

    char* token = strtok(str, ",");

    while (token != nullptr) {
        printf("%s\n", token);
        token = strtok(NULL, ",");
    }

    return 0;
}
举报

相关推荐

0 条评论