0

我想向用户询问单词,然后使用“strcpy”将单词从字符串转换为字符。然后我想确定单词中所有字母的 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;
}

评论部分是我一直在尝试进行转换的地方。我从工作表中复制了代码。即使它确实有效,我也不知道如何,以及这一切意味着什么。

谢谢你的帮助。

4

2 回答 2

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

char w[word]是不正确的。方括号代表大小,它必须是一个常量整数表达式。word是 type std::string,所以这既不合逻辑也不实际。也许你的意思是:

char w = word;

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

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

也就是说,您分配内存以w使用char*. 然后,您使用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;
}
于 2013-10-20T23:18:34.440 回答
0

您不需要使用strcpy() (或根本不需要使用 a 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;
}
于 2013-10-20T23:21:50.313 回答