关于使用string类以数组的形式输入却无法用cout输出的问题.

 

目录

前言:

问题描述:

 错误原因:

解决方法:

小结:


前言:

这个问题困扰了我挺长时间,从在学校做数据结构课设时使用string类时就发现了这个问题但一直没有解决,直接在网上搜索搜到的也是一些关于头文件错误的回答,的我的错误并不一样.问题很小但是不解决的话影响很大.

问题描述:

赋值字符串s时使用for循环的方式赋值无法用cout输出,而在定义时直接赋值可以用cout输出,这是为什么?并且如果将s引用到子函数里边,再将其返还赋值给主函数里边的另一个串的时候程序就会停止运行.

两种赋值方法如下:

string s ="A,B,C";
/*for(int i=0;i<3;i++){
    cin>>s[i];
} */
cout<<s;
 

运行结果如下:

 错误原因:

因为直接定义string s;后用for循环赋值后下标越界无法实现输出.包括后边的关于子函数的问题也是如此.

解决方法:

 只需定义s时注意分配足够的空间,比如后边需要为s赋值13个字符,初始化时要分配空间为n(n>=13).

例如:

string s(10, ' ');
for(int i=0;i<3;i++){
	cin>>s[i];
} 

 但此时使用s.size()返还的长度是10,并不是输入的3.

此后通过截取字符段的函数substr截取足够的长度赋值给新的串,便可得到输入的串.

string s2=s.substr(0,3); 

此时的s2.size()为3;

当然为s赋值时可直接使用cin;

cin>>s; 
cout<<s.size();

 此时s.size的长度为输入的真正长度而不是s初始化时的10;

小结:

虽说这个问题很小知道错误原因之后感觉很简单,但是如果在不了解原因的情况下去在网上搜索却很难搜索到(可能是我太菜了,这个问题太简单了之前都没人问),写下这篇文章的目的就是如果有谁和我犯了一样的错误,可以了解一下这个点去注意一下.

posted @   冷月半明  阅读(110)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示