基本上,我试图通过消除字符串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++中的数字!
#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';
}
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;
在循环结束时,不要忘记放一个