벡터
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>
#include <fstream>
#include <streambuf>
bool cmp(const std::string& lhs, const std::string& rhs) {
return lhs < rhs;
}
int main(int argc, char **argv){
/* USAGE: PROGRAM FILENAME DELIMITER */
if (argc != 3){
fprintf(stderr, "./program filename delimiter \n");
exit(EXIT_FAILURE);
}
char *filename = argv[1];
char *delimiter = argv[2];
std::vector<std::string> vWords;
std::vector<std::string> vWords_TMP;
std::ifstream t(filename);
std::string str((std::istreambuf_iterator<char>(t)),
std::istreambuf_iterator<char>());
boost::char_separator<char> sep(delimiter);
boost::tokenizer< boost::char_separator<char> > tokens(str, sep);
BOOST_FOREACH (const std::string& t, tokens) {
vWords.push_back(t);
}
vWords_TMP = vWords;
for(std::vector<std::string>::const_iterator i = vWords.begin(); i != vWords.end(); ++i) std::cout << *i << '\n';
std::sort(vWords_TMP.begin(), vWords_TMP.end());
for(std::vector<std::string>::const_iterator i = vWords_TMP.begin(); i != vWords_TMP.end(); ++i) std::cout << *i << '\n';
}
그러나, 표준이 :: 종류의 벡터를 정렬하는 데 실패합니다. I 입력 다음 파일을
> FILE
UUUUUUUUUUUUUUUUUUUUU
AAAAAAAAAAAAAAAAAAAAA
KKKKKKKKKKKKKKKKKKKKK
BBBBBBBBBBBBBBBBBBBBB
YYYYYYYYYYYYYYYYYYYYY
이되어야 :
AAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBB
KKKKKKKKKKKKKKKKKKKKK
UUUUUUUUUUUUUUUUUUUUU
YYYYYYYYYYYYYYYYYYYYY
을하지만 불행하게도 출력이 정렬 후 동일하다. 어떤 아이디어?
게시 된 많은 코드는 문제와 관련이 없으며 사용자가 문제를 읽는 데 도움이 될뿐만 아니라 스스로 해결할 수 있도록 도와줍니다. – aaronman
프로그램에 전달할 명령 줄, 특히 구분 기호는 무엇입니까? 당신은 조심스럽게 벡터의 끈에 인쇄되지 않은 문자가 있는지 검사 했습니까? 'getline'으로 입력을 읽고 정렬하면 예상대로 작동합니다. –