【发布时间】:2009-11-05 04:26:37
【问题描述】:
我正在阅读一个文本文件,其中包含一个带有标点符号的单词,我想将该单词读入一个没有标点符号的字符串。
例如,一个词可能是“你好”,
我希望字符串得到“Hello”(不带逗号)。如何仅使用 ifstream 库在 C++ 中做到这一点。 可以用ignore函数忽略最后一个字符吗?
提前谢谢你。
【问题讨论】:
我正在阅读一个文本文件,其中包含一个带有标点符号的单词,我想将该单词读入一个没有标点符号的字符串。
例如,一个词可能是“你好”,
我希望字符串得到“Hello”(不带逗号)。如何仅使用 ifstream 库在 C++ 中做到这一点。 可以用ignore函数忽略最后一个字符吗?
提前谢谢你。
【问题讨论】:
试试 ifstream::get(Ch* p, streamsize n, Ch term)。
一个例子:
char buffer[64];
std::cin.get(buffer, 64, ',');
// will read up to 64 characters until a ',' is found
// For the string "Hello," it would stream in "Hello"
如果您需要比简单的逗号更健壮,则需要对字符串进行后处理。步骤可能是:
如果我误解了您的问题,请随时详细说明!
【讨论】:
如果你只想忽略,,那么你可以使用getline。
const int MAX_LEN = 128;
ifstream file("data.txt");
char buffer[MAX_LEN];
while(file.getline(buffer,MAX_LEN,','))
{
cout<<buffer;
}
编辑:这使用std::string 并取消MAX_LEN
ifstream file("data.txt");
string string_buffer;
while(getline(file,string_buffer,','))
{
cout<<string_buffer;
}
【讨论】:
std::string。 c_str() 返回一个以空字符结尾的字符序列(一个 C 风格的字符串)。这不是必需的,您可以直接使用 cout 显示 std::string - 我已将其更新为该效果。
一种方法是使用 Boost 字符串算法库。有several "replace" functions可以用来替换(或删除)字符串中的特定字符或字符串。
您还可以在删除标点符号后使用Boost Tokenizer 库将字符串拆分为单词。
【讨论】: