【发布时间】:2017-07-31 06:01:41
【问题描述】:
基本上,我试图通过消除在字符串 s 中输入的所有数字来打印字符串。但是字符串 c 不打印。而且 c.empty() 给出了一个真值。为什么会发生这种情况以及如何解决?
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main()
{
string s;
string c;
getline(cin,s);
int l=0;
for(decltype(s.size()) i=0;i<=s.size();i++)
{
if(!isdigit(s[i]))
{
c[l]=s[i];
l+=1;
}
}
cout<<c<<endl; //no visible output
cout<<c.empty(); //this prints 1
return 0;
}
【问题讨论】:
-
c[l]=s[i];是错误的。您需要先致电resize()。 -
循环再运行一次。
-
@CinCout,幸运的是,当涉及到字符串时,
s[s.size()]仍然有效。它只是一个空字符。 -
@RSahu 有道理。但是在循环结束后,
'\0'不会自动附加到c的末尾(假设用户正确地为c进行了内存管理)?我知道手动添加空字符并没有什么坏处。 -
@CinCout,不,它不会自动发生。