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

一帮小弟我看一段C++程序吗?相当迷惑,第一次提问,求包含

2012-11-04 
【求助】一帮我看一段C++程序吗?相当迷惑,第一次提问,求包含!如图,黄色图里是我的C++源程序,黑色是输出,白色

【求助】一帮我看一段C++程序吗?相当迷惑,第一次提问,求包含!
如图,黄色图里是我的C++源程序,黑色是输出,白色是我的调试结果窗口。程序的目的:

将一段字符去掉标点符号之后显示出来。


问题: 问题就出在划红线处的 传字符 语句上:调试显示s1明明被赋值了,就是正确的输出结果,但是就是利用:cout<<s1<<endl; 就是无法显示出来, 但是当我用 cout<<s1[i]<<endl; 时,却可以单个的显示传给s1 的字符。求解:





[解决办法]
参考下面代码:

C/C++ code
#include <iostream>#include <string>using namespace std;int main(int argc, char* argv[]){    string s, s1;    string::size_type index = 0, i = 0;    cout << "enter a string with punctuation:" << endl;    cin >> s;    for(index = 0; index != s.size(); ++ index)    {        if(!ispunct(s[index]))        {            //s1[i++] = s[index];        // 将此句改为            //s1.append(1, s[index]);       //或下面一句都可以            s1.append(1, s.at(index));        }    }    cout << s << s1 << endl;    return 0;}
[解决办法]
楼主的程序 我在VC6里面 输入数据后就 出现内存错误。

定义了一个string对象s1,系统默认的构造函数置s1为空,后面直接通过s1[i++]来操作,必然出现错误。

建议楼主还可以定义一个char[]数组来接收,或者是3楼的办法。

C/C++ code
#include <iostream>#include <string>using namespace std;int main(void){    string s;    char c1[100];    cin >> s;    int i=0;    string::size_type index=0;    for (index=0;index!=s.size();index++)    {        if(!ispunct(s[index]))            c1[i++]=s[index];                }    cout<<s<<endl;    for(int j=0;j<i;j++)        cout<<c1[j];        return 0;}
[解决办法]
探讨

这么说的话,当我们对一个string类型的对象进行[]操作时,获得的不是一个左值,而是一个右值。

热点排行