返回信息流程序如下,请高手帮忙看看,谢谢!
# include <iostream>
# include <string>
using namespace std;
int main()
{
cout << "Enter a string to be processed:" << endl;
string s1, s2;
getline(cin, s1);
cout << s1 << endl;
string::size_type j = 0;
for (string::size_type i = 0; i != s1.size(); i++)
{
if(ispunct(s1[i]))
{
s2[j] = s1[i];
j++;
}
}
cout << s2 << endl;
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #44463同步于 2010/10/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【调试出错】String subscript out of range
dodoro
2010/10/4镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
哦!!原来是这个原因啊,,我又定义成:string s2[100]; 不会出现错误了,但结果还是不对。。这是为什么呢?
【 在 shenlei 的大作中提到: 】
: s2长度为0,必然out of range了啊...
哦,,我是菜鸟,见笑了。。
那请问你的意思是。。?赋初值吗?
【 在 zzjin 的大作中提到: 】
: 你的string s2[100]只是说是定义了100个string的数组吧= =没有解决任何问题吧= =
string s1;
getline(cin,s1);
string s2(s1.size(),0);//初始化了s1大小的字符串s2
ps 你的愿意是s2是s1的标点的集合?
【 在 dodoro 的大作中提到: 】
: 哦,,我是菜鸟,见笑了。。
: 那请问你的意思是。。?赋初值吗?
: 【 在 zzjin 的大作中提到: 】
: ...................
哦,终于知道了,谢谢!
我的意愿其实是s2是s1除去标点的集合,那句if(ispunct(s1[i]))貌似应该是if(ispunct(s1[i]) == 0)。。。
是C++ Primer的一道练习题,还是菜鸟,多谢啦~~
【 在 shenlei 的大作中提到: 】
: string s1;
: getline(cin,s1);
: string s2(s1.size(),0);//初始化了s1大小的字符串s2
: ...................
我觉得是定义了一个长度为100的字符串呢?请指教!
【 在 zzjin 的大作中提到: 】
: 你的string s2[100]只是说是定义了100个string的数组吧= =没有解决任何问题吧= =
【 在 dodoro 的大作中提到: 】
: 我觉得是定义了一个长度为100的字符串呢?请指教!
: 【 在 zzjin 的大作中提到: 】
: : 你的string 定义了s2[100]只是说是定义了100个string的数组吧= =没有解决任何问题吧=
: ...................
类比一下,char a[100]是不是定义了一个100个字符长的字符串呢?呵呵。。
void Huffman::count()
{
for(int i=0;i<10;i++)
{temp[(int)cstring-1]++;cstring++;}
int k=0;
for(int j=0;j<127;j++)
if(temp[j]){weight1[k]=temp[j];n++;k++;b[k]=char(j);}
}
\users\john\documents\visual studio 2008\projects\哈夫曼编解码器\哈夫曼编解码器\huffman.h(104) : error C2440: “类型转换”: 无法从“std::string”转换为“int”
1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
1>c:\users\john\documents\visual studio 2008\projects\哈夫曼编解码器\哈夫曼编解码器\huffman.h(104) : error C2676: 二进制“++”: “std::string”不定义该运算符或到预定义运算符可接收的类型的转换
请问有人能帮个忙吗?如何使用string里字符的ASIIC码值