函数未返回所需的字符串

时间:2015-07-22 00:03:30

标签: c++ string function loops

我正在尝试创建一个过滤掉句子中所有标点符号和空格的函数,并仅返回新字符串中的字母和数字。

离。如果我输入:嗨,我的名字是Zach1234。     我希望它只返回:himynameiszach1234

但它仍然只返回第一个字母。 关于如何解决这个问题的任何想法?

#include <iostream>
#include <cctype>
using namespace std;

string filter(string str)
{
    string result = "";
    for(int i = 0; i < (str.size()-1); i++)
    {
        if(isspace(str[i]))continue;
        if(ispunct(str[i]))continue;
        if(isdigit(str[i]))result += str[i];
        if(isalpha(str[i]))result += str[i];
    }
    return(result);
}


int main()
{
    string happy;

    cout <<"Please enter a string\n";
    cin >> happy;

    cout << filter(happy) << endl;

    return(0);
}

3 个答案:

答案 0 :(得分:1)

cin >> happy;

此代码从输入中读取字符串,直到获得空格,因此如果键入:

  

嗨,我的名字是Zach1234

你会得到:

  

您好;

对于这个循环,

for(int i = 0; i < (str.size()-1); i++)

条件应为:i < str.size()i <= str.size() - 1

答案 1 :(得分:1)

问题是cin >> happy;没有读入你的所有输入。 >>运算符将停在它读取的第一个空白字符处,并将其保留在流中。相反,您需要使用std::getline()

std::getline(std::cin, happy)

这会将流中的内容存储到happy,直到它到达换行符或文件末尾。如果它确实在换行中读取,则它不会被添加到字符串中,但会被丢弃。混合>>和`getline()时需要注意:Need help with getline()

正如user5141375所提到的,你的for循环也是一种情感。 size()返回字符串中的字符数,因此您需要循环到i < str.size()而不是i < str.size() - 1

答案 2 :(得分:0)

问题解决了。我应该使用getline()而不是cin。