2017-04-24 5 views
0

먼저 C++ 전문가가 아니며 배우는 중이므로 어떤 통찰력이라도 대단히 감사하겠습니다. 이 문제는 처음에는 간단한 문제로 보였지만 몇 달 후에도 여전히 실용적인 해결책을 찾지 못했습니다. 나는 그것이 단지 간과되고 있다는 간단한 대답을 기대한다.C++ 파일에서 텍스트 읽기 및 문자열을 int 배열로 파싱

다음은 비슷한 스레드를 다른 사이트에서 읽음으로써 작성한 코드입니다. 기본적으로 GF256 곱셈 배열 (각 256 256 행)가 들어있는 텍스트 파일에서 읽으려고합니다. 줄 단위로 읽는 것은 각 행의 문자열로 필요한 내용을 정확하게 볼 수있는 행 (cout < < multi_ < < endl;)에 의해 입증됩니다. 이 시점에서 나는 문제가있다. 이 문자열을 int 배열로 파싱하는 방법을 찾지 못하는 것 같습니다. 이 코드를 여러 번 반복하면서이 작업을 여러 번 시도했지만 아무도 나를 위해 일하지 못했습니다. 나는 이것을위한 아주 간단한 해결책이 있다고 가정한다. 다시 한번,이 문제에 대한 어떤 통찰력이라면 크게 감사 할 것입니다.

int kGF = 0; 
int multiGFtemp[256 * 256]; 

int n; 

int main() 
{ 
    string multi_; 

    ifstream fileGF("GF256MultiTable.txt"); 

    if(fileGF.is_open()) 
    { 
     while(getline(fileGF,multi_)) 
     { 


      cout << multi_ << endl; 
      cin.get(); 
     } 
     fileGF.close(); 
    } 
    else 
    { 
     cout << "File is not open" << endl; 
    } 

    cin.get(); 
    cout << multi_; 

    stringstream stream2(multi_); 

    while(stream2) 
    { 
     stream2 >> n; 

     cout << n << endl; 

     multiGFtemp[kGF] = n; 
     kGF++; 
    } 

    for(int k = 0; k < 256 * 256; k++) 
    { 
     /* 
     cout << multiGFtemp[k] << " "; 
     */ 
    } 

    cin.get(); 
    return 0; 
} 
+0

처리해야 할 기회가있는 유일한 줄은 마지막 줄입니다.'getline '을 처리해야 할 때 텍스트를 읽을 때입니다. 행 (문자열)과 배열을 인자로 취하고 첫 번째 인자의 내용으로 후자를 채우는 함수를 작성하는 것을 고려하십시오. 텍스트 행에서 숫자를 읽는 문제는 "CSV C++"로 검색하고 다른 사람들의 방법을 볼 수 있습니다 해냈다. – riodoro1

+0

파일 포맷 방법에 대한 예를 보여줄 수 있습니까? – NathanOliver

+0

.txt 파일은 다음과 같이 형식이 지정됩니다. 새로운 라인입니다. 0 0 0 0 ...; 1 1 1 1 1 ...; 1 2 3 5 ...; 각 숫자 사이에 정의되지 않은 양의 공백이 있지만 각 256 개의 번호가 매겨진 행 끝에 명확한 새 행이 있습니다. – pfe

답변

0

여러분의 프로그램은 그 시점에서 파일의 마지막 라인 multi_의 내용을 구문 분석합니다.
루프로 옮길 수는 있지만 일을 복잡하게 만들뿐입니다. 일반 배열에 256 * 256 숫자 만 있으면 파일 구조를 무시할 수 있습니다. 난 당신이 인자로 알려진 형식의 문자열을 읽으려고한다고 가정

int multiGFtemp[256 * 256]; 

int main() 
{ 
    ifstream fileGF("GF256MultiTable.txt"); 
    int kGF = 0; 
    while (kGF < 256 * 256 && fileGF >> multiGFtemp[kGF]) 
    { 
     kGF++; 
    } 

    for(int k = 0; k < kGF; k++) 
    { 
     cout << multiGFtemp[k] << " "; 
    } 
} 
+0

이것은 정확히 내가 찾고있는 것입니다. 완벽하게 간단합니다. 구문 분석을 루프로 옮겨 보았지만 그렇게 할 수는 있었지만 여기서 제공하는 솔루션은 훨씬 간단합니다. 고맙습니다! – pfe

0

:

이 배열로 해당 파일을 소리내어 방법 중 하나입니다. 예를 들어 "X = 1035, Y = 6658"이라는 줄이있는 파일이 있습니다. 이 경우, 나는 sscanf를 사용하는 것을 선호합니다. 예를 들어

:

string format("X = %d, Y = %d"); 
string str("X = 1035, Y = 6658"); 
int x, y; 
sscanf(str.c_str(), format, &x, &y); 
+0

줄을 배열로 구문 분석하는 주된 질문에 대한 답이 없습니다. – Dusteh

0

부스트 라이브러리는 여기에 당신을 도울 수 있습니다. 예를 들어 Boost String Algo Split을 살펴보십시오.

관련 문제