2013-08-12 3 views
1

임의의 단어로 채워진 3 줄의 텍스트 파일을 만들었습니다. 내가 원하는 :C++ : 텍스트 파일에서 개별 행을 읽고 알파벳순으로 단어 정렬

  • 파일의 각 줄을 개별적으로 읽습니다.
  • 알파벳순으로 각 행의 단어 정렬
  • 정렬 된 행을 콘솔에 출력하십시오.

이것은 내가 지금까지 [실행 가능한]을 마련했습니다 것입니다 : https://gist.github.com/anonymous/6211515

그것은 라인을 읽고 벡터 내부를 박았 종류의 벡터를 다음 콘솔로 결과 벡터를 인쇄합니다. 그러나 나는 그 선들을 정렬하는 중이다. 나는 실제 단어를 정렬하지 않는다. 전체 줄을 문자열로 입력하므로 문제가 발생합니다. 저는 C++ 프로그래밍에 익숙하지 않아 라인이 아닌 실제 단어를 정렬 할 수 있어야하는지 잘 모르겠습니다.

이것은 숙제가 아니며 곧 나올 예정인 시험 문제를 해결하기 위해 제안 된 문제입니다. 이 시험이 펜과 종이로 이루어지기 때문에 해결책이 가능한 한 간단해야한다는 것이 가장 중요합니다.

답변

2

는 내가 같은 것을 할 것입니다, 당신이 정확하게 원하는 것을 이해 적어도 경우 :

  1. std::getline와 문자열로 라인을 읽어보십시오.
  2. 출력에 정렬 된 단어를 쓰기 벡터
  3. 정렬 벡터
  4. 에 문자열에서 이제 stringstream에서
  5. 읽기 단어를 std::stringstream를 초기화합니다.
  6. 완료 될 때까지 반복하십시오.
+0

고맙습니다.이 솔루션은 내가 찾는 해결책과 같습니다. 나는 이것을 어떻게 구현할 지 확신하지 못한다! 전에는 stringstream을 사용한 적이 없습니다. 나는 지난 2 일 동안 벡터와 정렬에 대해서만 알고 있었다! – Haugum

+0

@Haugum : 다른 스트림과 마찬가지로 stringstream이 작동하므로 (예 :) while (your_stream >> word) words.push_back (word);와 같은 것을 사용할 수 있습니다. –

1

당신이 찾고있는 것은 lexicographical sorting 알고리즘입니다. 즉, 단어 사전은 알파벳 순서와 같습니다.

표준 C++은 해당 알고리즘을 지원합니다. alook 여기 보자 http://www.cplusplus.com/reference/algorithm/lexicographical_compare/

을 나는이 작업을 수행하기보다는 모두에서 아무것도를 사용하는 알고리즘을 작성하려는 있으리라 믿고있어 단지 #include <algorithm>

0

구현에 액세스하려면 것은 미리 작성된입니다.

일단 벡터에 문자열이 있으면 이제 각 단어를 단어로 구분해야합니다. 따라서 벡터의 각 문자열에서 각 문자를 반복하고, 공백 (또는 파일에서 사용하는 구분 기호)을 찾은 다음 각 공백 앞에있는 모든 내용을 다른 벡터에 넣기를 원할 것입니다. 문자열을 기록한 후에는 각 공백 앞에있는 모든 것을 삭제하여 두 번째 나타나지 않도록하십시오. 이제 단어의 벡터가 생겼습니다. 그런 다음 text_file을 현재 정렬하는 것과 같은 방식으로 해당 벡터를 정렬하면됩니다.

관련 문제