C++中string::type_size到底是什么,该如何理解

在学习C++过程中写了如下一串代码,调试过程中只有输入英文字母才会结束程序(跳出循环),按照我的理解只要输入的参数n不是string::size _ type就能跳出while循环了啊。
#include
using namespace std;
int main() {

  const string hexdigits = "0123456789ABCDEFF";
  cout << "please enter a series of number between 0 and 15\n"
    << "Separated by spaces. Hit Enter when finished: "
    << endl;
string result;
  string::size_type n;
  while (cin >> n)
       if (n < hexdigits.size())
            result += hexdigits[n];
   cout << "your hex number is " << result << endl;
   return 0;

}
kenny06
kenny06 { const string hexdigits = "0123456789ABCDEF"; cout << "0 and 15 " << endl; string result; string::size_type n; while (cin >> n) if (n >= hexdigits.size()) break; else { result += hexdigits[n]; } cout << result << endl; return 0; }
7 个月之前 回复
kenny06
kenny06 我改了一下,从0输到16就会结束,参考一下,新手
7 个月之前 回复
kenny06
kenny06 { const string hexdigits = "0123456789ABCDEF"; cout << "0 and 15 " << endl; string result; string::size_type n; while (cin >> n) if (n >= hexdigits.size()) break; else { result += hexdigits[n]; } cout << result << endl; return 0; }
7 个月之前 回复

4个回答

你的理解基本是对的,除了英文字母外,输入#、¥、%、^等 非数字字符 也会结束循环。

string::size_type是STL库模板类string的一个成员变量,这部分内容要深入学习可能耗时太多。
简单的讲,它相当于int类型,区别在于它的大小范围要比int类型大得多。

可以参考:

https://msdn.microsoft.com/library/a9c3e0a2-39bf-4c8a-b093-9abe30839591.aspx#basic_string__size_type

如果对您有帮助,请采纳答案好吗,谢谢!

fight_in_dl
战在春秋 补充一下,代码没有问题,可以跑出循环。
2 年多之前 回复

你连 break 都没有 咋跳出循环? 你这个就是个死循环,会一直写到result的后面。

cin>>n 当循环条件的话,返回值是一个cin对象,即返回一个输入流, 输入流的结束,可以是报错和EOF:
报错可以用非法的输入,类型不匹配,a,b,c,d,输入大小超过最大值,

键盘模拟EOF windows 用ctrl+c 模拟,linux 可以用 ctrl+d,这样都可以结束本次循环。

string::size_type就是string类内部定义的一个类型别名,就typedef出来的一个类型,用来表示字符串长度的非负整形。
具体是什么类型不重要......

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问