关于使用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;

小结:

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷月半明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值