【问题标题】:How to read a word into a string ignoring a certain character如何在忽略某个字符的情况下将单词读入字符串
【发布时间】:2009-11-05 04:26:37
【问题描述】:

我正在阅读一个文本文件,其中包含一个带有标点符号的单词,我想将该单词读入一个没有标点符号的字符串。

例如,一个词可能是“你好”,

我希望字符串得到“Hello”(不带逗号)。如何仅使用 ifstream 库在 C++ 中做到这一点。 可以用ignore函数忽略最后一个字符吗?

提前谢谢你。

【问题讨论】:

    标签: c++ string


    【解决方案1】:

    试试 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"
    

    如果您需要比简单的逗号更健壮,则需要对字符串进行后处理。步骤可能是:

    1. 将流读入字符串
    2. 使用 string::find_first_of() 帮助“分块”单词
    3. 根据需要返回单词。

    如果我误解了您的问题,请随时详细说明!

    【讨论】:

    • 非常感谢您解释如何忽略逗号以外的字符。我只是有一个疑问。就像我在上述答案中的评论一样。如果我使用 char 变量(缓冲区)获取单词,如何将完整的字符存储到字符串(wordstring)中。所以我可以通过简单地调用字符串(wordstring)在问题的其他部分显示这个词。感谢您的快速回复!
    【解决方案2】:

    如果你只想忽略,,那么你可以使用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;
    }
    

    【讨论】:

    • 这就像一个魅力,唯一的问题是我想将单词存储到一个字符串中。我该怎么做?
    • 我想是的。我只想将它存储到字符串类型变量中。我将声明为:string mystring 这样我就可以将不带逗号的单词“Hello”存储到“mystring”中。因此,如果我决定调用“mystring”,我可以说: cout
    • 还有一个问题。字符串变量末尾的“c_str”的作用是什么?
    • 所以,这个词现在存储在std::stringc_str() 返回一个以空字符结尾的字符序列(一个 C 风格的字符串)。这不是必需的,您可以直接使用 cout 显示 std::string - 我已将其更新为该效果。
    【解决方案3】:

    一种方法是使用 Boost 字符串算法库。有several "replace" functions可以用来替换(或删除)字符串中的特定字符或字符串。

    您还可以在删除标点符号后使用Boost Tokenizer 库将字符串拆分为单词。

    【讨论】:

    • 谢谢,我会调查的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多