基本上,我试图通过消除在字符串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;
}
答案 0 :(得分:4)
其他评论员已经解释了出了什么问题,但你也有一种更简单的方法来删除C ++中的数字!
#include <iostream>
#include <algorithm>
int main()
{
std::string s = "abc 123 abc 123 abc 123";
std::cout << "Original: " << s << std::endl;
s.erase(std::remove_if(s.begin(), s.end(),
[](char ch) { return std::isdigit(ch); }),
s.end());
std::cout << "Without Digits: " << s << '\n';
}
答案 1 :(得分:0)
string c; //An empty string
...
if(!isdigit(s[i]))
{
c[l]=s[i];
您尚未在c
中分配空格来放置字符。您可以使用push_back
代替将元素推送到c
。
c.push_back(s[i]);
或者您可以致电resize()
为c
分配空间。
c.resize(s.length());
...
c[l]=s[i];
l+=1;
在循环结束时,如果您将循环运行到\0
,请不要忘记放置s.size()-1
。
c[l]='\0';
答案 2 :(得分:0)
使用 operator+=
将字符串附加到字符串,例如
#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]))
{
//Use this
c+=s[i];
}
}
cout<<c<<endl; //no visible output
cout<<c.empty(); //this prints 1
return 0;
}