2016-09-24 9 views
1

안녕하세요 여러분, 제 첫 번째 게시물입니다. 정보가 충분하지 않은 등 실수를 저 지르면 다시 알려주지 않도록 알려주세요.while 루프가 종료 된 후 문자열의 내용이 삭제되고 있습니까?

내 문제는 파일의 내용을 가져 와서 작업하고있는 문자열에 입력해야한다는 것입니다. 그러나 while 루프가 끝난 후 while 루프 밖에서 해당 문자열을 사용하려고 시도하고 문자열의 내용을 조작하려고하면 종료됩니다. 문자열이 비어 있고 내용이없는 것 같습니다. 나는 std :: cout 라인을 사용하여 이것을 결정했다. 이 문제가 범위 문제라고 생각하지만 해결 방법을 모르겠습니다. 아래 질문에 관련된 코드입니다, 어떤 조언이나 도움이 크게 감사하겠습니다! 또한

std::string str; 
std::ifstream file; 

while(!file.eof()){ 
getline(file, str); 
std::cout << str << ""; 

} 

file.close(); 

std::cout << str << ""; 

std::map<std::string, int> map; 

for(int i = 0; i < str.length(); ++i){ 

    std::string sub = str.substr(i, k); 

    std::cout << sub << std::endl; 

    map.insert(make_pair(sub, 1)); 

    } 

    std::cout << "" << std::endl; 

, 나는 코드의 다른 부분에 정의 된 변수 크기 K에 최대 문자열을 잘라하려고, 그래서 C++에서 SUBSTR 방법을 사용하고, 나는이 때 때문에 작업을 믿습니다 while 루프에서 파일의 내용을 인쇄 할 수 있지만 형식이 꺼져 있습니다. while 루프가 실행되는 방식의 특성 때문에 생각합니다. 그러나 확실하지 않습니다. 잘못하면 수정하십시오. 또는 오해가있을 수 있습니다.

+0

다시 만들 표시된 코드는 [mcve]에 대한 모든 요구 사항을 충족하기 위해 실패하지해야 하나 명백한 실수. –

+0

알았어. 그 문서를 읽었을 뿐이며 포인터에 감사드립니다. – firetiger443

답변

1

std::vector에 텍스트 파일을 저장하는 것이 더 쉬울 수 다음 선택하지 않을까요 무엇 문장을 조작하고 싶습니까? 예 :

int main() 
{ 
    std::string str; 
    std::ifstream file{ "file.txt" }; 
    std::vector<std::string> vec; 

    // Store text file in vector 
    while (std::getline(file, str)) { 
     vec.emplace_back(str); 
    } 

    // Print out line 2: 
    std::cout << vec.at(1) << '\n'; 

    // Reverse line 2 and print: 
    std::string line2 { vec.at(1) }; 
    std::reverse(begin(line2), end(line2)); 
    std::cout << line2 << '\n'; 
} 
+0

나는 솔직히 생각하지 못했지만 지금 당장은 내 프로그램이 거의 끝났지 만 더 많은 연습을 위해 벡터 구현을 시도 할 것입니다. 벡터가 이보다 더 좋은/쉬운 이유가 있습니까? 케이스? – firetiger443

+0

@ firetiger443 벡터에 저장되어 있으면 조작하려는 텍스트 파일의 줄을 선택할 수 있습니다. 전의. 4 행 :'vec.at (5)'등. –

1

getline(file, str);으로 한 번에 한 줄만 저장하고 있습니다. 내 생각 엔 파일의 마지막 줄이 비어 있으므로 str에 저장된 마지막 값은 비어 있습니다.

대신 덮어 쓰는 연결할 수 있습니다 :

std::string temp; 
std::string str; 
std::ifstream file; 

while(!file.eof()){ 
    getline(file, temp); 
    std::cout << str << ""; 
    str = str + temp; 
} 

을 다른 방법으로, #include <fstream> 사용 추가

std::ifstream inputStream("myfile.txt"); 
std::string str((std::istreambuf_iterator<char>(inputStream), 
       (std::istreambuf_iterator<char>())); 
+1

이것은 완벽하게 작동했고 그 말이 맞았습니다. 나는 그것을 결코 짐작할 수 없었습니다. 해답을 주셔서 감사합니다! – firetiger443