[英]C++ Multi dimensional array from external file question
我正在尝试获得一条连续的行,其值用“&”分隔,以加载到多维数组中。 这就是我尝试的方式-一切都在代码中检出,除了字符串“ str”包含我的单独值(格式为“ value1,value2,value3等...”)只是将整个字符串加载到数组[0] [0]。 我知道有更好的方法可以做到这一点,但是我想知道的是为什么C ++不会像对待我键入单个值和硬编码“数组”那样对待“ str”。
这是代码:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
string str, strTotal;
ifstream in;
in.open("Desktop/01_001.PAC");
getline(in,str);
while ( in ) {
strTotal += str;
getline(in,str);
}
string searchString( "&" );
string replaceString( ", " );
assert( searchString != replaceString );
string::size_type pos = 0;
while ( (pos = str.find(searchString, pos)) != string::npos ) {
str.replace( pos, searchString.size(), replaceString );
pos++;
}
string array[4][5] = {str};
cout << array[0][0];
return(0);
}
这是外部文件( "Desktop/01_001.PAC"
):
void&void&void&void&a&a1&a2&a3&b&b1&b2&b3&c&c1&c2&c3&d&d1&d2&d3
提前致谢!
如果我正确地阅读了您的代码,则您似乎正在搜索字符串(从文件加载),并且仅将最后一个结果分配给数组索引(x = 4,y = 5)。 因此,您的代码正在执行以下操作:
while (have not found last variable)
search for next variable in string
assign variable to (4,5) in matrix
这样最后一次分配甚至可以工作,但是由于您只在末尾分配,因此数组将不会按照我认为您希望其被填充的方式进行填充。
我将假设您想要的矩阵总是相同的大小,否则情况会变得更加复杂。 在这种情况下,您可以使用以下方式:
let xMax = 4
let yMax = 5
for (x from 0 to xMax)
for (y from 0 to yMax)
find the next variable in the string
assign it to the current (x,y) location in matrix
调试语句是您的朋友! 尝试上述解决方案而不将其保存到数组中,而是打印出每一项,以查看其是否正常运行。
我还要指出,字符串“ void”不是C ++关键字void,因此如果您希望数组索引为void则将不起作用。 首先尝试使代码正常运行。
因为代码和数据是不同的东西。 您的代码在运行之前已被编译。
听起来这就是您所期望的:
该字符串包含文本“ foo,bar,baz”。
语句string[] whatever = {str};
运行。
因为“ str”包含“ foo,bar,baz”,所以您希望它具有与代码行实际上是 string[] whatever = {"foo", "bar", "baz"}
。
提出这样的问题意味着对编程工作原理的完全误解。
C ++永远不会发生这种神奇的事情。 不能 ,因为(a)如果您实际上想将'str'放入数组怎么办? (b)如果在程序中'foo','bar'和'baz'也是变量,应该怎么解释?
变量名称不是文本。 出于所有实际目的,它们在代码运行时不再存在 。 它们只是在那里,以便您作为程序员可以说“ 这里使用的值应该与那里使用的值相同”。
此外,C ++中的数组初始化并不关心初始化中实际有多少个元素,而不管数组的声明大小 。 任何其他元素将被默认初始化(即,分配空字符串)。
字符串不能视为字符串数组,因为它不是一个 。 如果需要字符串数组,请在确定字符串时使用各个字符串元素来构建它们。
但是由于您事先不知道有多少个元素,因此应该使用std::vector
而不是数组。 为什么要尝试将数据排列为二维结构? 您如何期望知道应该有多“宽”?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.