나는지도를 처음 사용하므로이 작업을 수행하는 가장 좋은 방법이 확실하지 않습니다. 이 작업은 허프만 코딩을 사용한 압축과 관련이 있습니다. 내가 가지고있는 것을 창작한다.문자열의 2 키로 맵을 채 웁니다. 문자 및 빈도 C++
#include <map>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
typedef map<char,int> huffmanMap;
void getFreq(string file, map<char, int> map)
{
map.clear();
for (string::iterator i = file.begin(); i != file.end(); ++i) {
++map[*i];
}
}
위에서 내가 온라인을 발견하지만 문자열 fileline을 채우는 텍스트 파일에서 읽을
int main()
{
map<char, int> huffmanMap;
string fileline;
ifstream myfile;
myfile.open("text.txt",ios::out);
while(!myfile.eof()) {
getline(myfile, fileline); //get the line and put it in the fileline string
}
myfile.close();
아무것도를 인쇄 할 수 없습니다 하나의 방법이다. 여기
for (int i=0; i<fileline.length(); i++) {
char t = fileline[i];
huffmanMap[i]? huffmanMap[i]++ : huffmanMap[i]=1;
}
는
getFreq(fileline,huffmanMap);
huffmanMap::iterator position;
for (position = huffmanMap.begin(); position != huffmanMap.end(); position++) {
cout << "key: \"" << position->first << endl;
cout << "value: " << position->second << endl;
}
이 내가지도를
system("pause");
return 0;
}
을 인쇄하려고하는 방법입니다 .. 숯불 값이 잘못된 기호와 smileyfaces 있습니다 내가지도를 채우는 시도 두 번째 방법이다
getFreq 메서드를 실행하면 프로그램이 충돌합니다. 나는 어느 쪽이든을 가진 어떤 과실도 얻지 않는다. 두 번째 방법을 사용하면 char 값은 의미가 없습니다. 두 메서드를 동시에 실행하지 않았으므로 방금 시도한 결과를 보여주기 위해 두 메서드를 모두 포함 시켰습니다.
어떤 통찰력도 감사 할 것입니다. 감사합니다. 제발 초보자 라야 해)
비정상적인 형식이 수정되었습니다. 스택 오버플로에 게시물을 제출하기 전에 "미리보기 창"을 사용하십시오. –
'while (! .eof)'이 잘못되었습니다 : http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.5. 이게 옳았다는 것을 어디에서 알았습니까? 많은 사람들이 그것을하고 왜 그 이유를 알고 싶습니다. –
또한 디버거에서 문제에 대해 뭐라고 말 했나요? –