我想向用户询问单词,然后使用'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;
}
评论部分是我一直在努力进行转换的地方。我从工作表中复制了代码。即使它确实有效,我也不知道它是怎么做的,以及它的意义。
感谢您的帮助。
答案 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];
也就是说,您使用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;
}
答案 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;
}