2017-01-04 9 views
1

charが指定された文字列の大文字であるかどうかを調べるC++関数を作成しようとしました。charが大文字であるかどうかをチェックし、指定された文字列の大文字を計算しないようにする関数

#include<iostream> 
#include <conio.h> 
#include<string> 
using namespace std; 
int iscapital(char x) 
{ 
if (x>='A'&&x<='Z') return 1; 

else return 0; 
} 
main() 
{ 
char a[20];int len; int c=0; 
cout<<"enter your line: "; 
cin>>a; 
len=strlen(a); 
for (int i=0;i<=len;i++) 
iscapital(a[i]); 
if (iscapital) 
{ 
    c++; 
} 

cout<<"capital letter in string is: "<<c; 
} 
+3

? 'isupper'を使用しない場合 – NathanOliver

+5

[' isupper'](http://en.cppreference.com/w/cpp/string/byte/isupper)、['count_if'](http://en.cppreference.com/ cpp /アルゴリズム/カウント)。 – BoBTFish

+1

英語のASCII以外を気にしている場合、[ロケール対応 'isupper'](http://en.cppreference.com/w/cpp/locale/isupper) –

答えて

1

あなたのコードは次のようになります。

int iscapital(char x) 
{ 
     if (x >='A' && x <= 'Z') return 1; 
     else return 0; 
} 

int main() 
{ 
    char a[20];int len; int c=0; 
    cout<<"enter your line: "; 
    cin.getline(a , 20);  
    // Note : ' getline ' will read the entire line written in the console and will stop only at the end line mark...will include and the white spaces . 
    // http://stackoverflow.com/questions/4745858/stdcin-getline-vs-stdcin 

    len=strlen(a); 
    for (int i = 0;i < len;i++) 
    { 
    if (iscapital(a[i])) 
    { 
     c++; 
    } 
    } 
    cout<<"capital letter in string is: "<<c; 

    return 0; 
} 
+0

おそらく、いくつかのドキュメントを読む時間があります... C++では、trueは1(intにキャスト)の値を表します// http://stackoverflow.com/questions/2725044/can-i-assume-booltrue-int1 -for-any-cコンパイラ –

+0

標準によれば、その前提で安全でなければなりません。 C++のbool型には、trueとfalseの2つの値があり、対応する値は1と0です。 –

2

あなたは正しくiscapitalを使用していない。

は、ここに私の試みです。他の人がコメントしたように何がしたいことは、文字が値の出現数や回数をカウントする資本とstd::count, std::count_ifであるかどうかを知るためにstd::isupperを調べ、この

for (int i=0;i<=len;i++) 
    if (iscapital(a[i])) 
    { 
     c++; 
    } 

ある

for (int i=0;i<=len;i++) 
    iscapital(a[i]); // Call the function, ignore the result 
if (iscapital) // <- This is not valid C++ 
{ 
    c++; 
} 

条件が真である回数。

さらに、mainは、intおよびiscapitalを返します。boolを返します。真値または偽値を表すのにintを使用することは時代遅れであり、新しいコードでは使用しないでください。最後に、char []の代わりにstd::stringを使用することを検討してください。文字配列を使って文字列を表現することは、Cのやり方です。 C++では多くの微妙な問題があるstd::stringを使用しています。

+0

あなたのおかげで多くのことをありがとう、私はstd :: isupperを見ていきます。これは以前知らなかった –

+0

これは愚かです... 'intを使う真偽値を表現するのは時代遅れです... '。ブールが持つ唯一の利点は、コードの意味的意味です。別の開発者がコードを読み取り、boolの戻り値の型を見た場合、彼は真理値を返すことをすぐに理解します。それはすべてです.. –

+0

@ReznicencuBogdan 'int'を使ってブール値を表現するのは、' bool'型がなかったC99の前にCで行われました。 'bool'の代わりに' int'を使ってC++の関数のブール結果を表現するのが有利な状況はありますか? –

1

はあなたのコードを修正する:

  • IsCapital()はブール値ではない整数を返す必要があります。使用しているにも

  • for (int i=0; i<=len; i++)この[len個]そうにそれを修正する:

for (int i = 0; i <len; i++)

  • これはif (iscapital) { c++;}何ですか?これは関数isCapitalを呼び出す方法ではなく、()とパラメータを追加する方法ではありません。

  • make if(iscapital)ループ内にはありません。ここでのループは、かっこを追加しない限り、1つのステートメントしかありません。

ので、コードは次のようになります。あなたがチェックコードを自分で書くために必要されています

bool iscapital(char x) 
{ 
    if (x >= 'A' && x <= 'Z') 
     return 1; 
    else 
     return 0; 
} 

main() 
{ 
    char a[20]; 
    int len; 
    int c = 0; 

    cout << "enter your line: "; 
    cin >> a; 
    len = strlen(a); 

    for(int i = 0; i < len; i++) 
    { 
     if (iscapital(a[i])) 
      c++; 
    } 

    cout << "capital letter in string is: " << c; 

    return 0; 
} 
+0

C++では、 'int main(int argc、char ** ....).....'が必要です。ちょうど「メイン」はあいまいです... –

+1

'IsCapital()は整数ではなくboolを返すべきです。 'あなたはどうしてこう書いたの?標準では、intを使用してbool値を返し、boolを使用してint(キャスト)を返します。 –

+1

あなたの答えのために多くのおかげでそれは私がたくさんの助けとIsCapital()整数を返すことができます私はそれを試みた;)しかし、私は関数isCapitalを呼び出す方法wrong.againあなたの助けをたくさんありがとうでした:) –

関連する問題