Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍으로 문장 내 각 단어의 ASCII 값 합계 구하기

ASCII 값은 ASCII 표준에 따라 문자를 정수로 나타낸 것입니다. 이번 문제에서는 하나의 문장이 주어졌을 때, 문장을 구성하는 각 단어별 ASCII 값의 합을 계산하는 방법을 알아보겠습니다.

문제 접근 방식

해결 방법은 다음과 같습니다.

먼저 문장을 한 글자씩 순회하면서 각 문자의 ASCII 값을 구합니다. 공백 문자를 만나기 전까지의 문자들의 ASCII 값을 모두 더하면 해당 단어의 합계가 됩니다. 이 과정을 모든 단어에 대해 반복하고, 마지막에는 각 단어의 합계를 모두 더하여 전체 총합을 구합니다.

예시

입력 문장: "I love tutorials point"

출력 결과

105 438 999 554
2096

위 결과를 보면 첫 번째 줄은 각 단어("I", "love", "tutorials", "point")의 ASCII 값 합계이며, 두 번째 줄인 2096은 네 단어 합계의 총합입니다.

C++ 구현 코드

#include <iostream>
#include <string>
#include <vector>
using namespace std;
long long int sumcalc(string str, vector<long long int>&arrsum) {
    int l = str.length();
    int sum = 0;
    long long int bigSum = 0L;
    for (int i = 0; i < l; i++) {
        if (str[i] == ' ') {
            bigSum += sum;
            arrsum.push_back(sum);
            sum = 0;
        }
        else
            sum += str[i];
    }
    arrsum.push_back(sum);
    bigSum += sum;
    return bigSum;
}
int main() {
    string str = "i love tutorials point";
    vector<long long int>arrsum;
    cout << "The string is " << str << endl;
    long long int sum = sumcalc(str, arrsum);
    cout << "Sum of ASCII values: ";
    for (auto x : arrsum)
        cout << x << " ";
    cout << endl << "Total sum -> " << sum;
    return 0;
}

코드 설명

sumcalc 함수는 두 가지 역할을 수행합니다.

첫째, 문자열을 순회하면서 공백을 만날 때마다 지금까지 누적된 단어의 합계를 벡터(arrsum)에 저장합니다. 둘째, 각 단어의 합계를 bigSum 변수에 계속 누적하여 최종적으로 전체 총합을 반환합니다.

main 함수에서는 예시 문자열을 정의하고 sumcalc 함수를 호출한 뒤, 벡터에 저장된 각 단어별 합계와 전체 총합을 화면에 출력합니다.

실행 결과

The string is i love tutorials point
Sum of ASCII values: 105 438 999 554
Total sum -> 2096

마무리

이 알고리즘의 시간 복잡도는 O(n)입니다. 여기서 n은 문장의 전체 문자 수를 의미하며, 문자열을 한 번만 순회하면 되기 때문에 매우 효율적입니다. 공간 복잡도 또한 단어 개수에 비례하는 수준으로 실용적입니다. 이러한 방식은 문자 처리나 데이터 인코딩 관련 문제에서 자주 활용되는 기본 패턴이므로 잘 익혀두면 유용합니다.