[英]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.