字符串,c ++中的char比较

时间:2013-03-31 20:55:07

标签: c++ string char ascii string-comparison

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

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

    }



}

5 个答案:

答案 0 :(得分:2)

首先,你将获得一个且只有一个字。 cin >> Sent无法提取整条线。您必须使用getline才能执行此操作。

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

第三,a < b < c(a < b) < c基本相同,根本不是你的意思(a < b && b < c)。

答案 1 :(得分: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>>

答案 2 :(得分:0)

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

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

if( Sent[a] > 96 && Sent[a] < 122 || ....

答案 3 :(得分:0)

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

这就是你想要的,因为:

96<int(Sent[a])<123

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

答案 4 :(得分: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