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