我正在尝试创建一个数组,数据来自文本文件。然后我试着计算该数组中有多少数据。在数组中,有两个数据,但是当计数器执行时,它表示只有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很新,所以请原谅我可怕的代码......如果有的话。
谢谢!
答案 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个逗号分隔的情况。提示:有时添加初始或终端分隔符以使处理一致是有用的。