帮助,我是C ++的新手,我需要一些建议

时间:2009-10-19 04:38:30

标签: c++

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

为什么这个程序不编译?

5 个答案:

答案 0 :(得分:3)

  • 您的代码无法编译。在声明之前,您在x中使用了cin << x
  • 使用std::getline读取一行。
  • 不要使用std类型名称(字符串)作为变量名称。 (感谢bdonlan)
  • 不要使用魔法数字(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
  }
}