【问题标题】:C Builder (C++) AnsiString Length methodC Builder (C++) AnsiString 长度方法
【发布时间】:2017-01-12 23:44:09
【问题描述】:

我习惯用c#编程,但现在我不得不帮助我的室友完成一个c++项目。

这是“不工作的代码”:

void  HighlightKeyWords::Highlight(TRichEdit eMemo,TRichEdit RichEdit1)
{
           ifstream file("KeyWords.txt");
           AnsiString temp;
           int maxWordLength=0;
           if(file.is_open())
        {
            while(file>>temp)
            {       if(temp.Length()> maxWordLength)
                    {
                            maxWordLength=temp.Trim().Length();
                    }
                    keyWords.push_back(temp);

            }
            file.close();
       }
       else
       {
            ShowMessage("Unable to open file. ");
       }
       for(unsigned i=0;i<KeyWords.size();i++)
       {
            richEdit1->Text=KeyWords[i];
       }
        eMemo->Text=MaxWordLength;
}

我从文件中得到一个关键字列表。在 MaxWordLength 我想知道一个单词的最大长度(单词在文本文件中由换行符分隔)。当我执行 temp.Length 时,我得到 695(文件中所有字符的数量)。为什么我没有得到要添加到向量中的单词的实际长度?

谢谢!

LE:我还在下面的 for 中执行了 MaxWordLength 逻辑,即我将项目放入 RichEdit 的位置。

【问题讨论】:

  • 你的风格要了我的命。请使用小写字母作为变量的第一个字母。语法高亮显示将它们作为类拾取。
  • 另外,AnsiString 没有&gt;&gt; 运算符。代码在哪里?
  • >> 的代码是 ifstream File 变量的一部分。文件的每一行都在临时变量中引入。变量我将使用小写,编辑即将推出
  • 对不起,让我改写一下:ifstreams 的运算符&gt;&gt; 不包括AnsiString 的实现(参见此处:cplusplus.com/reference/istream/istream/operator%3E%3E),它必须重载。我假设这段代码可以编译,所以必须在某处定义 istream&amp; operator&gt;&gt; (AnsiString&amp; val);
  • @mascoj 此函数在 ansistring 标头中声明,但我找不到任何有关其预期行为的文档。也许它会读取整个文件

标签: c++ vcl


【解决方案1】:

使用 file.getline() 而不是 >> 运算符,这不会在您的情况下产生所需的输出,但会为您提供完整的文件内容作为结果。所以 AnsiString().Length() 不是你的问题。只需修改部分代码以使其按预期工作:

char buffer[255];

if(file.is_open()){
    while(file.getline(buffer, sizeof(buffer))){
        temp = AnsiString(buffer).Trim();
        if(temp.Length()> maxWordLength) maxWordLength=temp.Length();
        keyWords.push_back(temp);
    }
    file.close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    相关资源
    最近更新 更多