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

时间:2017-07-31 06:01:41

标签: c++ stdstring

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

3 个答案:

答案 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;
}