2012-05-21 2 views
-1

내가 텍스트 파일의 각 라인을 읽을하려고 및 배열 컬럼에 넣어, 나는 정말이 시도 :텍스트 파일에서 C++로 배열을 읽는 중입니까?

string buffer[256]; 
string a; 
ifstream myfile ("1.txt"); 

for(i=0;i<10000;i++) 
    { 

     //readArrivalTimes(i); 
     myfile.getline (buffer,100); 
     a[i]=buffer; 
    } 

을하지만 내가 솔루션 중 하나에 대한 시도 않았다

작동하지 않습니다 당신은 저에게 남자들을 주었고 나는 이것을 이렇게했습니다 :

std::vector<std::string> v; 
std::string buffer; 


string a[1024]; 
ifstream myfile; 
myfile.open("1.txt"); 

for(i=0;i<n;i++) 
{ 
    getline (myfile, buffer); 

    a[i]= buffer; 
    cout << buffer << "\n"; 
} 

그러나 우리가 볼 수 있듯이 그것은 문자열입니다!

정수로 사용할 수 있습니까?

모든 사람이 좀 도와 모든 감사의 첫

, 난 정말 당신의 도움, 을 주셔서 감사합니다 [:) 해결] 나는 C++에 대한 완전히 새로운 오전.

물론 숙제가 아닙니다. 그것을 할 수

int a[1024]; 
ifstream myfile; 
myfile.open("1.txt"); 

for(i=0;i<n;i++) 
{ 
    getline (myfile, buffer); 

    a[i]= atoi(buffer.c_str()); 
    cout << buffer << "\n"; 
} 

가 대단히 감사 정수와 함께 작동되도록

나는 코드를 일부 수정했다.

+1

디버거 당신이 무엇을 말해 주는가인가? – pm100

+1

'string's를 사용한다면 왜 데이터를'string'으로 읽어 들여서 시작하지 않으시겠습니까? 또한 _ 행렬이 어디에 있습니까? –

+0

이 오류 cming된다 \t 2 \t 인텔리을 : 타입의 값 「숯불 * "타입"INT "\t C의 엔티티에 할당 될 수 없다 : \ 사용자 \ hajjaj 데스크탑 \의 RR \의 roundrobin.cpp \ \t 57 \t 8 \t RR – HAJJAJ

답변

1

코드에 많은 실수가 있습니다.
일부는 char 배열을 int 배열에 할당하는 것으로 이미 언급되었습니다.

그러나 C++보다 C 방식이 더 좋습니다. C++에서는 다음과 같이 보일 것입니다 :

std::vector<std::string> lines; 
std::ifstream myfile("1.txt"); 
if(myfile.isopen()) 
{ 
    std::string line; 
    while(getline(myfile, line)) 
    { 
     lines.push_back(line); 
    } 
} 

나는 그것을 테스트하지 않았지만이를 수행하는 방법을 보여 주어야합니다.

편집 : 의견에 따라 코드가 변경되었습니다.

편집 다시 정수 작업을 만들려면 :

std::vector<int> numbers; 
std::ifstream myfile("1.txt"); 
if(myfile.isopen()) 
{ 
    std::string line; 
    while(getline(myfile, line)) 
    { 
     int number; 
     std::istringstream(line) >> number; 
     numbers.push_back(number); 
    } 
} 
+4

이 코드에는 많은 실수가 있습니다 (추가 라인이 라인에 푸시됩니다) . while 루프는 다음과 같이 보일 것입니다 :'while (getline (myfile, line)) ' –

+3

아니요, 안돼요! 'while (myfile.good())'는 iostream 방지 패턴입니다! 'while (getline (myfile, line)) '을 사용해야합니다. 그 나쁜, 나쁜 스타일을 영속시키기 위해 Downvoted. –

+0

@JonathanWakely : 그저 iostream 개미 패턴이 아닙니다. (일반적인 언어를 불가지론하는 방식으로 IO를 사용하지 않는 한). 대부분의 언어에서 잘못되었습니다. –

0

a은 문자열이며 문자 모음의 추상화입니다.

a[i]은 개별 문자에 대한 참조를 반환합니다.

buffer은 문자 배열입니다. 배열의 이름이 첫 번째 요소에 대한 포인터의 이름을 지정한다는 점에서 C/C++ 대류입니다.

루프에서 수행중인 작업은 버퍼 시작 부분의 주소에 ith 요소를 할당하는 것으로 거의 원하지 않습니다.

문자열 배열을 만드는 것이 좋습니다. 즉, 대체 코드에서 해결하기 위해 다른 일이있다

string a[10000]; 

string a; 

; 예를 들어, 파일에 < 10k 회선이있는 경우 어떻게해야합니까?

+0

그는 'a'의 선언을 변경했습니다 .. – Default

+2

또는 그는'vector'를 사용할 수 있습니다 – Default

+0

그는 반드시'std :: vector'와 함께 가야합니다! – Skalli

0
int a[1024]; 
ifstream myfile; 
myfile.open("1.txt"); 
for(i=0;i<n;i++) 
{ 
    getline (myfile, buffer); 

    a[i]= atoi(buffer.c_str()); 
    cout << buffer << "\n"; 
} 

이 정답

+0

안녕하세요, 귀하의 코드가 작동 할 수 있지만 좋지 않아 C + +. 그것은 꽤 나쁜 스타일입니다. 정수로 작업하도록 코드를 업데이트했습니다.이 코드를 살펴보십시오. – Skalli

관련 문제