函数未返回所需的字符串
function isn't returning the desired string
我正在尝试创建一个函数,过滤掉句子中的所有标点符号和空格,并仅返回新字符串中的字母和数字。
交货。如果我输入:嗨,我的名字是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()对筛选函数进行合并。
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- std::hash<std::string> 可以为不同的字符串返回相同的值吗?
- Java 调用 dll 字符串返回类型方法
- 返回具有C++字符串返回值的函数的本地 C 字符串
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 尝试以随机字符(长读取)打印字符串返回结果
- 从字符串返回 i(索引)字
- 函数读取最大和min int值,并用文本字符串返回
- 如何将 YAML 节点中的序列作为字符串返回?
- 将注册表项读取为字符串返回数值
- 为什么我在尝试打印字符串返回时收到编译器错误?
- 使用 char*array 存储条形图的条形图,以便我可以动态制作它并作为字符串返回
- 字符串返回功能不起作用 - 'identifier is underfined'
- 将C 本地字符串返回到另一个功能
- 在MATLAB中仅接受INT32PTR时,将错误编号作为字符串返回
- 字符串流到字符串返回
- 字符串返回错误的长度
- 从共享指针矢量字符串返回值
- C++随机字符串返回意外结果
- 临时标准::字符串返回垃圾