簡體   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