【问题标题】:Checking for a character at end of AnsiString (and if finding), deleting it检查 AnsiString 末尾的字符(如果找到),删除它
【发布时间】:2019-01-29 12:50:53
【问题描述】:

我想检查 AnsiString 是否有特定的最后一个字符(在本例中为“f”),如果找到,则修改 AnsiString 以将其删除

这可能很明显,但到目前为止我的搜索还没有成功。

它将从磁盘读取的典型字符串可能是:

“暴击“主甲板后部”37.80f 2.12 11.92”

您会看到一个数字有一个“f”作为后缀,但情况并非总是如此。在这种情况下,我想将其删除。

我还想检查第一个字符是否为“-”为负数,但首先需要删除后缀“f”,然后再将其转换为浮点数。

我尝试的最后一种方法是编译但不会触发 if is

      char buffer[256];
      char *Buf, *Buf6, *Buf7, *Buf8, *Buf9, *Buf10;

      fgets(buffer,200,disk);
      if (strncmp(buffer,"crit \"",6) == 0)
      {
      CritCounter += 1;
      Buf = strtok(buffer,"\"");
      Buf6 = strtok(NULL,"\"");
      Buf7 = strtok(NULL," ,\t");
      Buf8 = strtok(NULL," ,\t");
      Buf9 = strtok(NULL," ,\t");
      Buf10 = strtok(NULL,"\n");
      AnsiString LongPos(Buf7);
      if (AnsiLastChar(LongPos) == "f")
      {
          LongPos.SetLength( LongPos.Length()-1 );
      }

提前致谢

帖子已编辑

这行得通。只是首先将最后一个字符分配给一个新的 AnsiString,然后在 if 中使用该 AnsiString 工作

我看不出它应该有什么不同

      AnsiString LongPos(Buf7);
      AnsiString LastChar = AnsiLastChar(LongPos);
      if (LastChar == "f")
      {
          LongPos.SetLength( LongPos.Length()-1 );
      }

与 if () == "f" 没有触发的情况相反

      AnsiString LongPos(Buf7);
      if (AnsiLastChar(LongPos) == "f")
      {
          LongPos.SetLength( LongPos.Length()-1 );
      }

【问题讨论】:

  • 查看 AnsiStrings 的 VCL 函数,如 System::Delete、System::Copy 等。

标签: c++builder ansistring


【解决方案1】:

AnsiLastChar()standalone functionAnsiString class method)返回指向最后一个字符的 char* 指针。您不需要将该指针分配给 another AnsiString 以进行比较,只需 取消引用 指针即可,例如:

char *LastChar = LongPos.AnsiLastChar();
if (*LastChar == 'f')
    ...

您不能直接将该指针与另一个字符指针进行比较,以检查它们是否具有相同的字符值。这就是为什么if (AnsiLastChar(LongPos) == "f") 总是错误的。像"f" 这样的字符串文字是一个const char[] 数组,它衰减const char* 指针。将两个指针相互比较只是比较它们的内存地址,而不是它们指向的数据的内容。 AnsiLastChar() 返回的内存地址永远不会等于字符串文字的内存地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多