将字符串转换为ascii的char

时间:2013-10-20 23:11:26

标签: c++

我想向用户询问单词,然后使用'strcpy'将单词从string转换为char。然后我想确定单词中所有字母的ascii代码的总和。

然而,我遇到了困难。我不明白我该怎么做。这是我迄今为止所能做到的。

#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;
}

评论部分是我一直在努力进行转换的地方。我从工作表中复制了代码。即使它确实有效,我也不知道它是怎么做的,以及它的意义。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

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

char w[word]不正确。方括号用于大小,它必须是常量整数表达式。 word的类型为std::string,因此这既不符合逻辑也不符合实际意义。也许你的意思是:

char w = word;

但这仍然无效,因为word是一个字符串,而不是一个字符。在这种情况下,正确的代码是:

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

也就是说,您使用wchar*分配内存。然后使用word.size() + 1初始化堆积分配的内存,达到这些字节。当您使用完delete[]时,请不要忘记强制性w

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;
}

答案 1 :(得分: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;
}

输出:

paul@local:~/src/cpp/scratch$ ./asccount
Enter word: ABC
Sum of ASCII values of characters is: 198
paul@local:~/src/cpp/scratch$

如果您确实想使用strcpy(),我会将其作为练习留给您修改上述代码。

这是一个更好的方法,只需使用std::string(和C ++ 11,,显然假设您的系统首先使用ASCII字符集):

#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;
}