#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Input a Sentence: ";
cin >> x;
{
char* string = x;
int letter_count[26];
// Initialization
for(int i=0; i<26; letter_count[i++]=0);
// Counting the number of letters
for(int i = 0; string[i] != '\0'; i++) {
if(string[i] > 64 && string[i] < 91)
letter_count[string[i]-65]++;
else if (string[i] > 96 && string[i] < 123)
letter_count[string[i]-97]++;
else if (string[i] == '.')
break;
}
// Show the result
for(int i=0; i < 26; i++)
if (letter_count[i] != 0)
std::cout << letter_count[i] << " "<< char(i+97) << std::endl;
}
}
为什么这个程序不编译?
答案 0 :(得分:3)
x
中使用了cin << x
。std::getline
读取一行。不要使用魔法数字(63等)。
通过将上述组合在一起,我们就有了这个。这远非完美,但它有所改进。
cout << "Input a Sentence: ";
string line;
std::getline(std::cin , line);
int letter_count[26];
// Initialization
for(int i= 0; i<26; i++)
{
letter_count[i] = 0;
}
// Counting the number of letters
for(int i = 0; line[i] != '\0'; i++) {
if(line[i] >= 'a' && line[i] <= 'z'){
letter_count[line[i]-'a']++;
}else if (line[i] >= 'A' && line[i] <= 'Z'){
letter_count[line[i]-'A']++;
}else if (line[i] == '.')
break;
}
// Show the result
答案 1 :(得分:1)
对于初学者,您必须先声明x
才能使用它。
您也可以更改
int letter_count[26];
// Initialization
for(int i=0; i<26; letter_count[i++]=0);
到
int letter_count[26] = {0};
答案 2 :(得分:1)
不要使用单词string作为变量名,你要包含string.h标题,它定义了一个具有相同名称的类,
是的,如果你写一个具有特定问题的问题会更好
答案 3 :(得分:1)
您尚未声明x
变量。它应该是std::string
:
string x;
在阅读输入后,您声明了一个名为string
的变量(带char* string = x;
)。如果您遗漏该行,只需在现在使用x
的任何地方使用string
,您的程序就可以正常编译。
它已经几乎已经完成了我猜你打算做的事情。
答案 4 :(得分:0)
代码中的具体问题是您在使用前未声明变量x
。 (并且你的声明很奇怪。要声明一个变量,请将类型后跟名称,如char* x
,可选地后跟一个赋值来初始化它,char* x = "hello world"
。声明变量后,编译器会让你使用它。
#include <iostream> // include the header containing cout and cin
#include <string> // include the header containing the string class
// using namespace std; // don't do this. Prefix standard library names with the std namespace instead
int main()
{
std::cout << "Input a Sentence: ";
std::string x; // declare a variable named x, so we can use it afterwards - and use the C++ string class, not char*
//std::cin >> x; // only reads a word into x. If we want a sentence, use getline instead:
std::getline(cin, x);
int letter_count[26] = {}; // automatically fills the array with zeros
// Counting the number of letters
for(std::string::iterator it = x.begin(); it != x.end(); ++it) { // might as well use iterators. That's what they're for. And then your code behaves better if the string actually contains a \0 character.
if(*it >= 'A' && *it <= 'Z'){ // never leave out the {}'s. It'll blow up on you later, when you modify the code
letter_count[*it - 'A']++;
}
else if (*it >= 'a' && *it <= 'z'){
letter_count[*it-'a']++;
}
else if (*it == '.'){
break;
}
}
// Show the result
for(int i=0; i < 26; i++)
if (letter_count[i] != 0)
std::cout << letter_count[i] << " "<< static_cast<char>(i+97) << std::endl; // prefer C++-style casts
}
}