2016-09-27 1 views
-3

처음에는 C++을 전혀 알지 못합니다. 기본적으로 나는 보이는 파일이 있습니다알 수없는 행 수를 읽고 배열에 값을 저장하는 C++

junk 
junk 
... 
junk 
3 4 5 1 
-9 7 4 -7 
8 6 3 1 
.... 
junk 
junk 
7 5 2 -1 
.... 
-1 7 4  1 
etc. 

숫자의 각 블록을 개별적으로 분석하고 싶습니다. 나는. 여기에 두 개의 숫자 블록이 있으며 개별적으로 동일한 분석을 수행하려고합니다.

저는 이것을 파이썬에서 구현하는 방법을 알고 있습니다. C++에서 어떻게 보이는지 모르겠습니다.

또한 두 줄의 모든 가능성을 한 번에 비교하면서 숫자 블록을 분석하려고합니다. 여기

r = [] 
s = [] 
t = [] 
for i in range(len(w)): 
    for j in range(len(w) - 1): 
    r.append(w[i]*x[j] - w[j]*x[i]) 
    s.append(x[j]*y[i] - y[j]*x[i]) 

for i in range(len(w): 
    for j in range(len(s)): 
    t.append(s[j]*w[i] + r[j]*x[i]) 
best = min(t) 

내가 ++ C와 함께이 시도에 했어 문제의 커플 : I 행의 번호를 모르는 - (시도하지 않은 것 같아요) 파이썬에서이 같이 보일 것이다 데이터 (n이라고 부름)에 대해, 분석하고자하는 숫자 블록 수를 알고 있지만 (예를 들어 N = 2로 호출). 그리고 많은 세분화 오류. 데이터를 저장할 수 있다고 생각하지만 전화를 걸 수는 없습니다. 나는 클래스 데이터 데이터를 만들고 거기에서 일한다.

double get_data = 0; 
for (std::string line; (std::getline(file,line));) 
    { 
    std::istringstream row(line); 
    Data data; 
    row >> data.w >> data.x >> data.y >> data.z; 

    std::vector<double> wcol; 
    std::vector<double> xcol; 
    std::vector<double> ycol; 
    std::vector<double> zcol; 

get_data++; 

for (int j = 0; j < get_data - 1; j++) { 

    if(data.w > 0) 
{ 

     wcol.push_back(data.w); 
     xcol.push_back(data.x); 
     ycol.push_back(data.y); 
     zcol.push_back(data.z); 

    } 
get_data = 0; 
} 

그러나 나는 C++로 무엇을하고 있는지 알지 못합니다.


어쩌면이 질문은 별도로해야 할 수도 있지만 분석을 끝내고 다음 번호 블록을 위해 다시 시작하고 싶습니다.

+0

이러한 문제를 해결하는 올바른 도구는 디버거입니다. 스택 오버플로를 묻기 전에 코드를 단계별로 실행해야합니다. 자세한 도움말은 [작은 프로그램 디버깅 방법 (Eric Lippert 작성)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참조하십시오. 문제를 재현하는 [최소, 완료 및 확인 가능] (http://stackoverflow.com/help/mcve) 예제와 함께 해당 질문을 \ [편집]해야합니다. 디버거. –

+0

왜'python' 태그가 붙어 있습니까? –

+0

파이썬 내부에 ​​몇 가지 예제를 작성했기 때문에 파이썬으로 태그를 지정했습니다. 죄송합니다. 잘못 태그를 사용했는지. @ πάνταῥεῖ, 나를 믿어 라. 나는 시도했다. 이전 stackoverflow 질문을 검색하고 지난 4 일 동안의 디버거를 살펴 보았습니다. 이것이 제가 진행 한 모든 과정입니다. 제공 한 예제 코드는 잘 컴파일되고 세분화 오류가 발생합니다. 이것은 디버깅 후 컴파일 된 코드를 얻은 후였습니다. 이 시점에서 저는 100 % 분실되었습니다. 이것은 "작은"프로그램이 아닙니다. 저는 현재 작업하고있는 부분만을 제공했습니다. 내가하고있는 나머지. –

답변

1

파일에서 알 수없는 텍스트 줄을 읽으려면 동적 컨테이너를 사용하십시오.

std::string text_line; 
std::vector<std::string> file_text; 
while (std::getline(data_file, text_line)) 
{ 
    file_text.push_back(text_line); 
} 

이것은 가장 효율적인 방법은 아닙니다.

효율적인 방법으로 이면 모든 라인을 메모리에 읽어 들여야하는지 스스로에게 물어보십시오. 대부분의 응용 프로그램은 필요하지 않습니다. 한 번에 한 줄씩 읽고 처리 할 수 ​​있습니다.

연구 : "메모리 매핑", "이중 버퍼링"및 "버퍼에 텍스트 파일 읽기".

다른 검색 : "C++ 읽기 공간으로 구분 된 텍스트 파일 번호"또는 "C++ 읽기 공간으로 구분 된 배열".

관련 문제