文本文件中的数组 - 无效

时间:2011-11-05 02:21:11

标签: c++ arrays text-files

我正在尝试创建一个数组,数据来自文本文件。然后我试着计算该数组中有多少数据。在数组中,有两个数据,但是当计数器执行时,它表示只有1个。

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
   int n = 0;
   ifstream show_version_library;
   show_version_library.open("version_library.txt");
   char show_version_library_var[1024];
   if (show_version_library.is_open())
   {
       while (!show_version_library.eof())
       {
          show_version_library >> show_version_library_var;
       }
   }

   // string replace * to ,
   string show_version_library_actual( show_version_library_var );
   int position = show_version_library_actual.find( "*" ); // find first space
   while ( position != string::npos ) 
   {
       show_version_library_actual.replace( position, 1, "," );
       position = show_version_library_actual.find( "*", position + 1 );
   }  

   // string replace ^ to "
   string show_version_library_actual2( show_version_library_actual );
   int position2 = show_version_library_actual2.find( "^" ); // find first space
   while ( position2 != string::npos ) 
   {
       show_version_library_actual2.replace( position, 1, "\"" );
       position2 = show_version_library_actual2.find( "^", position2 + 1 );
   } 

   // convert show_version_library_actual2 to char*  
   char* lib2;
   lib2 = &show_version_library_actual2[0];

   // array counter
   char* library_actual[100] = {
                               lib2
                               };

   char* p;
   while (p != '\0')
   {
       n++;
       p = library_actual[n];
   }

   cout << "\nN is " << n << " that was n\n"; // should be outputting 2
   show_version_library.close();

   system("PAUSE");
   return 0;
}

(代码已重新格式化,因此它将在此处显示为代码)

在version_library.txt中

"1.8_HACK"*"1.8"*

我尝试输出“lib2”,它出现了

"1.8_HACK", "1.8", 

..因为它应该......

但是,当我输出library_actual[0]时,整条线都会出现,而不仅仅是"1.8_HACK"

我对cpp很新,所以请原谅我可怕的代码......如果有的话。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为本节开始出现问题:

   // convert show_version_library_actual2 to char*   
   char* lib2; 
   lib2 = &show_version_library_actual2[0]; 

那不会转换任何东西。它的作用是声明一个char指针lib2并将其值设置为show_version_library_actual2 char数组中第一个字符的地址。这没有什么不对,但没有发生转换。

序列:

   // array counter 
   char* library_actual[100] = { 
                               lib2 
                               }; 

不计算任何东西。它的作用是设置一个包含100个char指针的数组。只用一个值初始化它 - 指向show_version_library_actual2字符数组中第一个字符的指针。阵列中的其他99个值未经初始化。

下一个循环:

   char* p; 
   while (p != '\0') 
   { 
       n++; 
       p = library_actual[n]; 
   } 

可能不是你想要的,因为它处理的是一个大多数未初始化的数组。它返回1但仅因为library_actual [0](lib2 = show_version_library_actual2数组的第一个字符)非null,因此循环结束。

我不确定您打算如何识别数据。也许你认为通过添加逗号你会得到单独的字符串。如果这就是你想要的,你必须记住,在C / C ++中,没有什么比这更好的了。作业通常就是这样 - 许多其他语言都不会发生转换。

如果你需要获得单独的字符串,你需要这样做。如果你只是想计算一个逗号发生的次数相当容易。例如,您可以这样做:

char *p = lib2;
int n = 0;
while(*p != '\0')
{
    if(*p == ',')
        ++n;
}

用这个n代表逗号的数量。在你的样本中会给你2.我会把它作为练习留给你来处理2个项目但用1个逗号分隔的情况。提示:有时添加初始或终端分隔符以使处理一致是有用的。