2013-10-20 3 views
0

사용자로부터 단어를 요청한 다음 단어를 'strcpy'를 사용하여 char에서 char로 변환하고 싶습니다. 그런 다음 단어의 모든 문자에 대한 ASCII 코드 합계를 결정하려고합니다.ascii에 대해 문자열을 char로 변환

그러나 난 어려움을 겪고 있습니다. 어떻게 할 수 있는지 정확히 이해하지 못합니다. 이것은 내가 지금까지 할 수 있었던 것이다.

#include <iostream> 
#include <time.h> 
#include <stdlib.h> 
#include <string.h> 

using namespace std; 

int main() 
{ 
    string word; 
    cout << "Enter word: "; 
    getline(cin, word); 
    /* 
     char w[word]; 
     strcpy(w,word.c_str()); 
     int ('A'); 
     cout<<char(65); 
    */ 
    return 0; 
} 

주석 처리 된 부분은 내가 변환을 시도한 부분입니다. 워크 시트의 코드를 복사했습니다. 비록 그것이 효과가 있었다고하더라도, 나는 그것이 어떻게 모든 것을 의미하는지, 어떻게 알지 못합니다.

도움 주셔서 감사합니다.

+6

왜이 일을 :

여기에 (처음에 설정된 ASCII 문자 분명히 시스템을 추정 및 C++ (11), 사용합니다) 단지 std::string를 사용하여 할 수있는 더 좋은 방법입니다 이? – 0x499602D2

+0

런타임에 정의 된 크기의 기본 제공 배열을 만들 수 없습니다. – chris

+0

이것이 내 문제 프롬프트입니다. 사용자에게 단어를 물어보십시오 (텍스트 상자 사용). 그런 다음 단어의 모든 문자에 대한 ASCII 코드의 합을 결정하고 일부 레이블에 명시하십시오. string.h를 include해야하고 'strcpy'함수를 사용하여 string을 char로 변환해야합니다. – user2877477

답변

3
char w[word]; 
strcpy(w, word.c_str()); 

char w[word]이 올바르지 않습니다. 대괄호는 크기에 대한 것으로, 상수 적 표현식이어야합니다. wordstd::string 유형이므로 논리적이지도 실제적인 의미가 없습니다. 아마 당신은 그것을 의미 :

char w = word; 

그러나 word 문자열이 아닌 문자이기 때문에 그것은 여전히 ​​작동하지 않습니다. 이 경우 올바른 코드는 다음과 같습니다

입니다
char* w = new char[word.size() + 1]; 

, 당신은 char*를 사용 w의 메모리를 할당합니다. 그런 다음 word.size() + 1을 사용하여 해당 바이트에 해당하는 힙 할당 메모리를 초기화합니다. 당신이 w를 사용하여 완료 할 때 의무적 delete[]에 대해 잊지 마세요 :

delete[] w; 

그러나, 원시 포인터를 사용하여 명시 적 new이 경우에 필요하지 않습니다 있습니다. 귀하의 코드는 쉽게로 정리 될 수있는 다음과 같은 :

#include <numeric> 

int main() 
{ 
    std::string word; 

    std::getline(std::cin, word); 

    int sum = std::accumulate(word.begin(), word.end(), 0);     /* 
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^     */ 

    std::cout << "The sum is: " << sum << std::endl; 
} 
+0

+1'std :: accumulate()'에 +1! –

+0

고정 헤더 (''에 없음) – MSalters

+0

@MSalters 와우, 이상 하네. ... – 0x499602D2

0

하는 당신은 strcpy()를 사용 (또는 그 문제에 대해 전혀 char *를 사용) 할 필요는 없지만, 이것은 char 포인터를 사용하여 계산을 다하겠습니다 :

#include <iostream> 
#include <string> 

int main() { 
    std::string word; 

    std::cout << "Enter word: "; 
    std::cin >> word; 

    const char * cword = word.c_str(); 
    int ascii_total = 0; 

    while (*cword) { 
     ascii_total += *cword++; 
    } 

    std::cout << "Sum of ASCII values of characters is: "; 
    std::cout << ascii_total << std::endl; 

    return 0; 
} 

출력 : 당신이 정말로 strcpy()를 사용하려는 경우

[email protected]:~/src/cpp/scratch$ ./asccount 
Enter word: ABC 
Sum of ASCII values of characters is: 198 
[email protected]:~/src/cpp/scratch$ 

, 나는 modif하는 당신에게 운동으로 떠날거야 위의 코드.

#include <iostream> 
#include <string> 

int main() { 
    std::string word; 

    std::cout << "Enter word: "; 
    std::cin >> word; 

    int ascii_total = 0; 
    for (auto s : word) { 
     ascii_total += s; 
    } 

    std::cout << "Sum of ASCII values of characters is: "; 
    std::cout << ascii_total << std::endl; 

    return 0; 
} 
+0

도움 주셔서 감사합니다. strcpy()에 대한 코드를 수정하면 도움이 될 것입니다. 나는 그것을하는 법을 정말로 모른다. 어쨌든 고맙습니다. – user2877477

+0

이 질문에 대한 다른 대답은 이미 설명되어 있습니다. –

관련 문제