【发布时间】:2019-05-09 02:17:25
【问题描述】:
我是 C++ 编程新手,想编写一个具有以下要求的程序:
给定一个文本由
- 单词
- 信件
- 数字
- 标点符号和
- 空格。
过滤掉所有不在0..9、a..z 或A..Z 范围内的字符。
这意味着当我输入时:
The quick brown fox jumps over the lazy dog!
输出将是:
Thequickbrownfoxjumpsoverthelazydog
我输入了以下代码并尝试运行它,结果很好。但是,当我将它提交到另一个 c++ 平台进行有效性检查时,并没有生成输出。
我很困惑...如果可以,请提供帮助。非常感谢大家。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string line;
getline(cin, line);
for (int i = 0; i < line.size(); ++i)
{
if (!((line[i] >= 'a' && line[i] <= 'z') || (line[i] >= 'A' && line[i] <= 'Z') || (line[i] >= '0' && line[i] <= '9')))
{
line[i] = '\0';
}
}
cout << line;
return 0;
}
【问题讨论】:
-
您没有删除任何字符。你替换
\0,它通常有一个特殊的含义——它标志着字符串的结束。您的“其他 C++ 平台”可以通过这种方式解析字符串,并得出结论认为它收到了空字符串。改用if中的erase(i, 1)。 -
你误以为
line[i] = '\0';会删除一个字符。它没有,它只是用另一个字符替换一个字符。std::string有一个方法erase用于擦除字符,尝试使用它。 -
你的意思是改行[i] = '\0];擦除(i,1)?我不太明白你们的意思
标签: c++ algorithm string-parsing stdstring input-filtering