gpt4 book ai didi

c++ - 来自文本文件的数组 - 不工作

转载 作者:行者123 更新时间:2023-11-28 08:14:49 25 4
gpt4 key购买 nike

我正在尝试创建一个数组,其中的数据来自文本文件。然后我试图计算该数组中有多少条数据。数组里面有2条数据,但是计数器执行的时候说只有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 的新手,所以请原谅我糟糕的代码……如果有的话。

谢谢!

最佳答案

我认为从这一部分开始出现问题:

   // 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 数组的第一个字符)不为空,所以循环结束。

我不确定您打算如何识别数据片段。也许您认为通过添加逗号可以得到单独的字符串。如果那是您想要的,您必须记住,在 C/C++ 中,不会发生类似的事情。赋值通常就是这样——不会像许多其他语言那样发生转换。

如果您需要获取单独的字符串,则需要这样做。如果您只是想计算逗号出现的次数,那很容易。例如你可以这样做:

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

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

关于c++ - 来自文本文件的数组 - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com