【问题标题】:How to determine the position of character in a text file, (C++)如何确定文本文件中字符的位置,(C++)
【发布时间】:2017-07-25 22:53:40
【问题描述】:

我正在尝试计算文本文件中不同字符的位置,但遇到了麻烦。目标是读取文件,识别每个大写/小写字母的每个第一个实例的位置以及数字的第一个实例 (0-9),空格计数对字符位置的影响。我正在使用一个功能这样做,但已经碰壁了。 我对一些东西进行了硬编码,主要用于测试/参考目的。 使用下面的代码只输出“S”,没有位置量(输出为字符串)。 我假设主要错误必须来自错误地读取文件。我试图一次阅读所有内容,然后对其进行解析以查看我正在测试的字符是否匹配。

代码如下:

//function


string position_upper_alpha(char upper_letter){
    string line;
    int location=0;
    string val;
    string iname;
    iname = "testing.txt";
    ifstream ist {iname};     // ist is an input stream for the file named name
    if (!ist) error("can't open input file ",iname);
    getline ( ist, line );
    for (int i=1;i<line.length();i++){
    if (line.at(i)==upper_letter){
        location=i;
        break;
    }
}
    if(location ==0){
        val="Not Found";
}
    return val;
}



int main(){

//arbitrary character for testing 
char test = 'S';
cout<<test<<position_upper_alpha(test);

}

【问题讨论】:

  • 当您返回一个空字符串时,您期望会发生什么?

标签: c++ file char


【解决方案1】:

您的逻辑有缺陷,因为您正在逐行读取文本并使用仅对应于该行而不是整个文件的索引来比较行的字符。

我建议将返回值更改为有符号整数类型,这样如果没有找到字符,则可以返回-1,找到时返回文件中字符的索引。

long position_upper_alpha(char upper_letter)
{
   string iname = "testing.txt";
   ifstream ist {iname};
   if (!ist) error("can't open input file ",iname);

   int c;
   long location = 0;
   for ( ; (c = ist.get()) != EOF; ++location )
   {
      if ( c == upper_letter )
      {
         return location;
      }
   }

   return -1;
}

【讨论】:

  • 一些后续行动:我正在尝试输出位置,或者如果文件中不存在该字符,则输出“未找到”。我不能让函数返回一个“字符串”类型的值吗?
  • 您可以测试if(position_upper_alpha(something) == -1) 并输出您想要的任何内容:)。此外,您可以编辑 R Sahu 编写的函数在内部进行测试并返回 string。
  • @ztalira “一些后续行动” How to heal help vamirism?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2020-08-07
  • 2012-05-30
相关资源
最近更新 更多