0

*你好!我正在制作程序,用户输入一个句子,程序打印出一个句子中有多少个字母(大写和非大写)。我做了一个程序,但它打印出奇怪的结果。请尽快提供帮助。:)

include <iostream>
include <string>
using namespace std;

int main()
  {
string Sent;

 cout << "Enter a sentence !"<<endl;
 cin>>Sent;

    for(int a=0;a<Sent.length();a++){

        if (96<int(Sent[a])<123 || 64<int(Sent[a])<91){
           cout << "this is letter"<< endl;
        }else{
            cout << "this is not letter"<< endl;
        }

    }



}
4

5 回答 5

2

首先你会得到一个而且只有一个词。cin >> Sent不会提取整行。你必须使用getline才能做到这一点。

其次,你应该使用isspaceorisalpha来检查字符是否为空格/字母数字符号。

第三,a < b < c本质上与 相同(a < b) < c,这根本不是您的意思 ( a < b && b < c)。

于 2013-03-31T20:59:38.837 回答
1

您可以使用 std::alpha 执行以下操作:

#include <iostream>
#include <string>
#include <cctype> 
using namespace std;

int main()
{
   string Sent;

    cout << "Enter a sentence !"<<endl;
    //cin >> Sent;
    std::getline (std::cin,Sent);
    int count = 0;

     for(int a=0;a<Sent.length();a++){
        if (isalpha(Sent[a])
        {
          count ++;
         }
      }
      cout << "total number of chars " << count <<endl;

  }

如果您的输入包含空格,则使用它getline比使用更好。cin>>

于 2013-03-31T21:01:38.347 回答
0
if (96 < Sent[a] && Sent[a]<123 || 64 < Sent[a] && Sent[a]<91)

这就是你想要的,因为:

96<int(Sent[a])<123

将评估96<int(Sent[a]),为 bool,然后将其(即 0 或 1)与 123 进行比较。

于 2013-03-31T21:00:09.353 回答
0

这条线

if (96<int(Sent[a])<123 || 64<int(Sent[a])<91)

一定是这样的

if ((96<int(Sent[a]) && int(Sent[a])<123) || (64<int(Sent[a]) && int(Sent[a])<91))

但我建议使用头文件isalpha()中定义的函数。cctype

于 2013-03-31T21:00:37.373 回答
0
if (96<int(Sent[a])<123 || 64<int(Sent[a])<91){

这是错误的。您无法使用此表示法进行比较。你必须这样做:

if( Sent[a] > 96 && Sent[a] < 122 || ....
于 2013-03-31T20:58:18.707 回答