功能不返回所需的字符串

我试图做一个函数,过滤出一个句子中的所有标点和空格,并只返回新字符串中的字母和数字。功能不返回所需的字符串

ex。如果我输入:嗨,我的名字是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);

}

回答:

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

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

这将从流的内容存储到happy,直到它到达一个新行或文件的末尾。如果它在新行中读取,则不会将其添加到字符串中,但会被丢弃。混合>>和`getline()虽然:Need help with getline()

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

回答:

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

回答:

cin >> happy; 

此代码读取你输入一个字符,直到得到一个空间,所以如果你键入:

嗨,我的名字是Zach1234

您将获得:

嗨;

对于这个循环,

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

的条件应该是:i < str.size()i <= str.size() - 1

回答:

您也可以使用isalnum()为您的过滤器函数进行合并。

以上是 功能不返回所需的字符串 的全部内容, 来源链接: utcz.com/qa/265324.html

回到顶部