繁体   English   中英

来自外部文件问题的C ++多维数组

[英]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则将不起作用。 首先尝试使代码正常运行。

因为代码和数据是不同的东西。 您的代码在运行之前已被编译。

听起来这就是您所期望的:

  1. 该字符串包含文本“ foo,bar,baz”。

  2. 语句string[] whatever = {str}; 运行。

  3. 因为“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM