在 C++ 中初始化字符串重要吗?



基本上,我试图通过消除字符串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;

在循环结束时,不要忘记放一个,如果你运行循环到s.size()-1

c[l]='';

使用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;
}

相关内容

  • 没有找到相关文章

最新更新