2012-03-06 6 views
2

누구든지 문자열의 각 문자를 ASCII 값으로 쉽게 변환하여 값을 합산 할 수있는 방법을 말해 줄 수 있습니까? 해시 함수의 값을 합산해야합니다. Java 또는 .NET에서 Char 반대로 그들이 (이미 ASCII 표현에, 당신은 std::string 또는 char*, 당신은 직접 문자를 요약 할 수 있습니다 의미 치죠문자열의 각 문자를 ASCII로 변환하십시오.

#include <string> 
int main() { 
    int sum = 0; 
    std::string str = "aaabbb"; 
    for (unsigned int i = 0; i < str.size(); i++) { 
    sum += str[i]; 
    } 
    return 0; 
} 

답변

11

문자열의 각 문자는 이미 아스키입니다). 충분히 큰 결과 유형 (int 이상)을 사용해야합니다.

반면에 C++에는 문자열에 대한 해시 함수가 많이 있어야합니다.이 경우에는 운동이 아니라면 그 중 하나를 선택하는 것이 좋습니다.

+0

은 물론 EBCDIC의 아니라면) (그러나 당신은 합계 것 EBCDIC 값 - 코드는 여전히 실행되지만 다른 결과를 제공합니다.) – MSalters

0

:

3

해시를 만들려면, 당신은 기본적으로 유일한 정수 문자열의 각 문자의 값이 아닌 ASCII 값이 필요합니다. 그들은 아주 다른 두 가지입니다. ASCII는 인코딩입니다. 문자열도 UTF-8로 인코딩 될 수 있습니다. 문자열은 단일 NULL로 끝나지 만 각 문자는 1 바이트 이상을 차지할 수 있습니다. 어쨌든, perreal의 솔루션이 당신이 원하는 것입니다. 그러나 char과는 인코딩 유형과 저장 유형 간의 차이점을 이해해야하므로 별도의 대답으로 작성했습니다.

C + 11에서는 표준 라이브러리에 내장 된 해시 함수가 있음을 언급 할 가치가 있습니다. 이것이 당신이 그것을 사용하는 방법입니다.

#include <string> 
#include <iostream> 
#include <functional> 

int main() { 
    const std::string str = "abcde"; 
    std::cout << std::hash<std::string>()(str) << std::endl; 
    return 0; 
} 

마지막으로, 당신은 여전히 ​​표준 : 축적하여, C++ (11)가없는 문자열의 요소를 요약 할 수 있습니다

#include <string> 
#include <iostream> 
#include <numeric> 

int main() { 
    //0x61+0x62+0x63+0x64+0x65=0x1ef=495 
    const std::string str = "abcde"; 
    std::cout << std::accumulate(str.begin(),str.end(),0) << std::endl; 
    return 0; 
} 
+0

감사합니다. 매우 도움이됩니다. –

관련 문제