【问题标题】:C++ deleting last symbol in an arrayC ++删除数组中的最后一个符号
【发布时间】:2011-11-26 19:33:48
【问题描述】:

我遇到了一个问题。我有一个代码应该读取以下文本文件,删除最后一个符号并将新文本输出到其他文件中。我的问题是:如何删除最后一个符号?我尝试过类似

 for(int j=0;j<10000;j++)
{
    if(simbols[j]=='\0')
    {
        cout<<j;
        minusOne = j-1;
        minusOne ='\0';
        break;
    }
}

但它并没有真正帮助并做我想做的任何事情。任何帮助将不胜感激!

附: 如果有任何帮助,这里是完整的代码:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char simbols[10000]; int minusOne;
ofstream outFile("outFile.out");
ifstream inFile("inFile.in");

for(int i=0;i<10000;i++)
{
    inFile >> simbols[i];
}

for(int j=0;j<10000;j++)
{
    if(simbols[j]=='\0')
    {
        cout<<j;
        minusOne = j-1;
        minusOne ='\0';
        break;
    }
}

if(outFile.is_open())
{
    for(int l=0;l<10000;l++)
    {
        outFile << simbols[l];
    }
}

inFile.close();
outFile.close();
return 0;

}

【问题讨论】:

  • 为什么不将文件内容保存到字符串然后写入新流fileTextString.substr(0, fileTextString.size()-1);??
  • 任何使用小写 ell 作为变量名的代码都会得到我的反对。您认为通过选择这样的名称可以完成什么?
  • 嗯...上次我检查变量是由编写代码的人设置的,而不是第 3 方用户。

标签: c++ arrays fstream


【解决方案1】:

minusOne 只是一个整数变量,与符号数组无关。您想让它成为指向 char 的指针并指向数组的最后一个元素:

char simbols[10000]; char* minusOne = simpols;

...

 cout<<j;
 minusOne += j-1;
 minusOne ='\0';
 break;

当然,干净的做法是 bert-jan 建议的方式。

P。 S. 忍不住指出正确的拼写是“symbol”,而不是“simbol”。

【讨论】:

    【解决方案2】:

    这是删除字符串缓冲区的最后一个字符的方法:

    char *buffer = strdup("hello world");
    
    buffer[strlen(buffer) - 1] = '\0';
    

    【讨论】:

      【解决方案3】:

      在我看来,你的意思是

      simbols[minusOne] = '\0';
      

      而不是

      minusOne = '\0';
      

      【讨论】:

      • 是的,这就是解决方案,该死的我需要多想,答案很明显 :D 但还是谢谢!
      猜你喜欢
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2018-11-25
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多