xiangshengtanzi 2024-06-01 12:09 采纳率: 25%
浏览 9

string字符串赋初值无效

定义string型的空字符串 , 然后按照元素顺序赋初值 , 最后输出这个字符串 , 为什么结果还是空字符串 ?
例如 :
 
#include<bits/stdc++.h>
 
using namespace std;
 
int main() {
    string s;
    s[0] = '1';
    s[1] = '2';
    cout << s << endl;
}
 
输出:空字符串
然后改成这样就对了 :
 
#include<bits/stdc++.h>
 
using namespace std;
 
int main() {
    string s;
    s += "12";
    cout << s << endl;
}
 
输出:12
  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-06-01 12:09
    关注

    中午好🌞🌞🌞
    本答案参考ChatGPT-3.5

    问题原因: 在C++中,string类型是不可变的,这意味着一旦创建了一个string对象,你不能直接修改它的字符。当你尝试使用s[0] = '1';这样的方式来修改字符串时,实际上并没有改变原始字符串,而是创建了一个新的string对象,因为s[0]实际上是返回一个指向char的指针,然后你对这个指针进行了赋值。

    解决方案:

    1. 使用+=操作符或append()函数: 如果你想将多个字符追加到字符串中,应该使用+=操作符或者append()函数。这两个方法会直接修改原始字符串,而不会创建新的字符串对象。
    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        string s;
        s += '1';
        s += '2';
        // 或者
        // s.append("12");
        cout << s << endl;
    }
    
    1. 初始化字符串时使用字面量: 如果你想创建一个包含特定字符的字符串,可以使用字面量,如"12",这样编译器会自动处理字符串的内部实现。
    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        string s = "12";
        cout << s << endl;
    }
    

    这两种方法都可以得到预期的结果,即输出12

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月1日