VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 366|回复: 6

[求助] 我是C++新手,能不能帮我解决关于string的一个疑问?

[复制链接]
36_avatar_middle
在线会员 yq1557 发表于 2018-2-26 21:48:59 | 显示全部楼层 |阅读模式
#include<iostream>
#include<string>
int main()
{
    using namespace std;
    string name;
    cout << "Enter your first name,Please: ";
    cin >> name;
    int i = 0;
    while (name[i]!=0)
    {
        cout << name[i] << ": " << int(name[i])<<endl;
        i++;
    }
    system("pause");
    return 0;
我的意思是,C++中string类对象既然不使用空字符‘\0’来标记字符串结尾,
那么上述代码为什么会知道在我输入的字符串(例如我输入:name)的结尾处结束循环,
并且输出时只输出name,以及每个字母对应的ASCII码,
而我使用的是name[i]!=‘\0’这种用于char数组字符串结尾的判断条件呀




上一篇:c++ operator == 的疑问
下一篇:请教C++Primer中的一个实例

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

01_avatar_middle
online_admins admin 发表于 2018-2-26 23:05:31 | 显示全部楼层
1、先来说说标准库STL中的string并没有明确说字符串内部是否使用 '\0' 来结尾,而且C++11开始明确要求必须以 '\0' 结尾,所以尽量不要做这种假设,既然 string 在 C++11之前没有明确要求,那么他肯定是提供了长度size 之类的函数,让你可以获取到他的字符串长度。

2、既然使用了C++STL中的 string 类型对象,那么就别去检测他的字符串结束标志,如果要检测的话也是根据 string 对象的 c_str() 方法返回的 const char * 来对每个字符进行检测

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

36_avatar_middle
ico_lz  楼主| yq1557 发表于 2018-2-26 23:15:06 | 显示全部楼层
admin 发表于 2018-2-26 23:05
1、先来说说标准库STL中的string并没有明确说字符串内部是否使用 '\0' 来结尾,而且C++11开始明确要求必须 ...

那个,我有点笨,理解不是太清楚,你看我这样的理解正确吗?


在C++11之前,string后面默认没有结束符,只有C风格的字符串数组是以'\0'结尾,所以我的那段代码会有问题。

而在新的C++11后,编译器的厂商会在string结尾后默认加上’\0',所以那段代码是正确的(实际上到现在string字符后面也没有结束符,它是一种容器,本身带有长度,不需要结束符作为存贮的边界)

我这样的理解是不是合适了?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

01_avatar_middle
online_admins admin 发表于 2018-2-26 23:17:43 | 显示全部楼层
yq1557 发表于 2018-2-26 23:15
那个,我有点笨,理解不是太清楚,你看我这样的理解正确吗?

嗯,没错的!
不过话说回来,你这种方式去研究 string,路子有点歪!意义不大

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

36_avatar_middle
ico_lz  楼主| yq1557 发表于 2018-2-26 23:20:50 | 显示全部楼层
admin 发表于 2018-2-26 23:17
嗯,没错的!
不过话说回来,你这种方式去研究 string,路子有点歪!意义不大

嗯,知道了,谢谢您!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

00_avatar_middle
在线会员 luoya120 发表于 2018-2-27 20:37:08 | 显示全部楼层
小伙伴,这个是我帮你测试的结果,看来还是‘\0’结尾。
#include<iostream>
#include<string>
int main()
{
        using namespace std;
        string name;
        cout << "Enter your first name,Please: ";
        cin >> name;
        int i = 0;
        for (; i < 10;i++)
        {
                cout << name[i] << ": " << int(name[i]) << endl;
        }
        //while (name[i] != 0)
        //{
        //       
        //        i++;
        //}
        system("pause");
        return 0;
}

结果:
Enter your first name,Please: daozhu
d: 100
a: 97
o: 111
z: 122
h: 104
u: 117
:0

点评

谢谢  发表于 2018-3-3 19:43

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-19 10:04

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表