如何确定文本文件中字符的位置,(C ++)

时间:2017-03-06 07:00:15

标签: c++ file char

我试图计算文本文件中不同字符的位置,但我遇到了麻烦。目的是读取文件,识别每个上/下的每个第一个实例的位置大小写字母和数字的第一个实例(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);

}

1 个答案:

答案 0 :(得分:0)

由于您逐行阅读文本并使用仅对应于行而不是整个文件的索引来比较行的字符,因此您的逻辑存在缺陷。

我建议将返回值更改为有符号整数类型,以便在找不到该字符时返回-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;
}