函数未返回所需的字符串

function isn't returning the desired string

本文关键字:字符串 返回 函数      更新时间:2023-10-16

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

交货。如果我输入:嗨,我的名字是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 stringn";
    cin >> happy;
    cout << filter(happy) << endl;
    return(0);
}

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

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

这将把流中的内容存储到happy中,直到它到达换行符或文件末尾。如果它确实在换行符中读取,那么它不会被添加到字符串中,而是被丢弃。在混合>>和getline()时,您确实需要小心:需要帮助getline()

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

cin >> happy;

这段代码从你的输入中读取一个字符串,直到得到一个空格,所以如果你输入

你好,我的名字是Zach1234

你将得到:

你好;

对于这个循环,

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

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

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

还可以使用isalnum()对筛选函数进行合并。