首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这个C++程序如何会报错,系统说好像是越界,但是小弟我是用string:size_type,搞不懂

2012-04-08 
这个C++程序怎么会报错,系统说好像是越界,但是我是用string::size_type,搞不懂[codeC/C++][/code]#includ

这个C++程序怎么会报错,系统说好像是越界,但是我是用string::size_type,搞不懂
[code=C/C++][/code]

#include "stdafx.h"
#include <iostream>
#include "Sales_item.h"
#include <vector>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
string s;
cin>>s;
for(string::size_type i=0;i!=s.size();i++)
if(ispunct(s[i]))
s[i]=' ';
cout<<s<<endl;
system("");
return 0;
}


[解决办法]
string::size_type从本质上来说,是一个整型数。关键是由于机器的环境,它的长度有可能不同。 例如:我们在使用 string::find的函数的时候,它返回的类型就是 string::size_type类型。而当find找不到所要找的字符的时候,它返回的是 npos的值,这个值是与size_type相关的。假如,你是用 string s; int rc = s.find(.....); 然后判断,if ( rc == string::npos ) 这样在不同的机器平台上表现就不一样了。如果,你的平台的string::size_type的长度正好和int相匹配,那么这个判断会侥幸正确。但换成另外的平台,有可能 string::size_type的类型是64位长度的,那么判断就完全不正确了。 所以,正确的应该是: string::size_type rc = s.find(.....); 这个时候使用 if ( rc == string::npos )就会正确了。
[解决办法]
没觉得你的程序有错啊,专门在GCC上跑了一下,挺正常。
[解决办法]
system("");
VS上就这句要出错,删掉就没事了。
[解决办法]
http://www.cplusplus.com/reference/string/string/size/

楼主如果用的VC 6.0的话就换个吧
[解决办法]
代码没有问题!

C/C++ code
#include "stdafx.h"#include <iostream>#include <vector>#include <string>using namespace std;int main(int argc, char* argv[]){string s;cin>>s;for(string::size_type i=0;i!=s.size();i++)if(ispunct(s[i]))s[i]=' ';cout<<s<<endl;return 0;}
[解决办法]
sring::size_type类型是unsigned 型,这个事实表明 size_type 存储的 string 长度是 int 所能存储的两倍。

热点排行