【求助】一帮我看一段C++程序吗?相当迷惑,第一次提问,求包含!
如图,黄色图里是我的C++源程序,黑色是输出,白色是我的调试结果窗口。程序的目的:
将一段字符去掉标点符号之后显示出来。
问题: 问题就出在划红线处的 传字符 语句上:调试显示s1明明被赋值了,就是正确的输出结果,但是就是利用:cout<<s1<<endl; 就是无法显示出来, 但是当我用 cout<<s1[i]<<endl; 时,却可以单个的显示传给s1 的字符。求解:
[解决办法]
参考下面代码:
#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楼的办法。
#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;}
[解决办法]