*你好! 我正在制作用户输入句子和节目的程序 打印出句子中有多少个字母(资本和非资本)。 我做了一个程序,但它打印出奇怪的结果。请尽快帮助。 :)
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;
}
}
}
答案 0 :(得分:2)
首先,你将获得一个且只有一个字。 cin >> Sent
无法提取整条线。您必须使用getline
才能执行此操作。
其次,您应该使用isspace
或isalpha
来检查字符是否为空格/字母数字符号。
第三,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
。