c++字符串问题

查看:112
本文介绍了c++字符串问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

代码如下图所示,在main函数中,有两个string类型的变量,其中一个变量str1我直接初始化,另一个变量str2我没有初始化,但是string类型调用默认构造函数,使得str2 = "\0",是这样吧。我对str1的首字符进行了变换,然后用cout可以在后面输出,为什么我对str2的首字符进行变换后,再用cout输出,但是没有得到正确的输出啊。请问这是怎么回事啊?谢谢。

#include <iostream>
#include <string>

int main()
{
    std::string str1 = "test";
    std::string str2;

    if (str2[0] == '\0')
        std::cout << "yes" << std::endl;

    str1[0] = 'a';
    str2[0] = 'b';
    std::cout << str1 << '\n'
              << str2 << '\n';
    
    str2[1] ='\0';

    std::cout << str1 << '\n'
              << str2 << '\n';

    return 0;
}

运行结果:

解决方案

#include <iostream>
#include <string>

int main()
{
    std::string str1 = "test";    //有效长度4(不包含'\0')
    std::string str2;    //有效长度0

    //前面声明其实和 str1[4], str2[0]没什么不同 
    
    // c++ string类并没有智能到 像其他的一些语言
    // 你访问没有分配的字符下标 自动分配内存的地步 
    // 正如str2[0] 你并没有分配任何内存,也就不能访问了

    if (str2[0] == '\0')   //这个访问是 错误的,如果你判断是否为空请用 .empty
        std::cout << "yes" << std::endl;

    str1[0] = 'a';    //如果你非要这么做可以使用 .insert的重载
    str2[0] = 'b';
    std::cout << str1 << '\n'
              << str2 << '\n';
    
    str2[1] ='\0';

    std::cout << str1 << '\n'
              << str2 << '\n';

    return 0;
}

这篇关于c++字符串问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆