2013-03-31 3 views
0

* Hello! Я делаю программу, где пользователь вводит предложение, а программа печатает, сколько писем есть в предложении («Капитал» и «Не-капитал»). Я сделал программу, но она распечатывает странные результаты. Пожалуйста, помогите как можно скорее. :)string, char сравнение в C++

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

    } 



} 
+1

'a Dave

+0

Не могли бы вы добавить «странный результат»? – Trinimon

ответ

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

Это wrong.You не может сравниться с использованием этих обозначений. Вы должны сделать:

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

Прежде всего, вы получите одно и только одно слово. cin >> Sent не будет извлекать всю строку. Для этого вам нужно использовать getline.

Во-вторых, вы должны использовать isspace или isalpha вместо этого, чтобы проверить, является ли символ пробельным/буквенно-цифровым символом.

В-третьих, a < b < c по существу то же самое, что и (a < b) < c, что вы не имели в виду (a < b && b < c).

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.

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 заголовка.

1

Вы можете сделать следующее с станд :: альфа:

#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>> если ваш вход содержит пробелы.

+0

* «Лучше использовать getline, чем использовать cin, если ваш вход содержит пробелы». * Nah. Лучше использовать 'getline' _on_' cin', так как 'operator >>' останавливается на пробелах. Оба работают на 'cin';). – Zeta

+0

@Zeta спасибо. Согласен. Я только что обновил его. – taocp