1

最後に、小文字を大文字に変換し、文字列がアルファベットか数値コードかを次のように識別する解決策を見つけます。

#include <cctype>
#include <iostream>
using namespace std;
int main()
{
  char ch;
  cout<<"Enter a character: ";
  gets(ch);

  if ( isalpha ( ch ) ) {
    if ( isupper ( ch ) ) {
      ch = tolower ( ch );

      cout<<"The lower case equivalent is "<< ch <<endl;
    }
    else {
      ch = toupper ( ch );
      cout<<"The upper case equivalent is "<< ch <<endl;
    }
  }
  else
    cout<<"The character is not a letter"<<endl;
  cin.get();
} 

上記のコードを改善して、単一の文字ではなく文字列を取得するにはどうすればよいですか? ループは同じステートメントを何度も出力し続けます。ありがとう

4

3 に答える 3

2

更新:これは、1 つの単語を出力するよりクリーンなソリューションです。

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

char switch_case (char ch) {
  if ( isalpha ( ch ) ) {
      if ( isupper ( ch ) ) {
        return tolower ( ch );
     }
     else {
       return toupper ( ch );
     }
   }
  return '-';
}

int main()
{
  string str;
  cout<<"Enter a word: ";
  cin >> str;

  transform(str.begin(), str.end(), str.begin(), switch_case);
  cout << str << "\n";
}

この例ではstd::transformが使用されています。


単語全体を読み取り、std::string::iteratorを使用して一度に 1 文字ずつ繰り返します。

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

int main() 
{
  string str;
  cout<<"Enter a word: ";
  cin >> str;

  for ( string::iterator it = str.begin(); it != str.end(); ++it ) {
    char ch = *it;
    if ( isalpha ( ch ) ) {
      if ( isupper ( ch ) ) {
        ch = tolower ( ch );

        cout<<"The lower case equivalent is "<< ch <<endl;
     }
     else {
       ch = toupper ( ch );
       cout<<"The upper case equivalent is "<< ch <<endl;
     }
   }
   else
     cout<<"The character is not a letter"<<endl;
 }
 cin.get();
}
于 2013-03-04T08:27:43.377 に答える
2

まず、input 演算子を使用して文字列を読み込みます。

std::string input;
std::cin >> input;

std::getline必要に応じて、複数の単語を取得するために使用できます。

std::transform次に、文字列を大文字または小文字に変換するために使用できます。

範囲ベースの for ループを使用して、文字列内の文字を反復処理することもできます。

于 2013-03-04T08:25:00.320 に答える
1

C++11:

#include <cctype>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    cout << "Enter data: ";
    cin >> s;

    for (auto &ch : s)
    {
        if (isalpha(ch))
        {
            if (isupper(ch))
            {
                ch = tolower(ch);
                cout << "The lower case equivalent is " << ch << endl;
            }
            else
            {
                ch = toupper(ch);
                cout << "The upper case equivalent is " << ch << endl;
            }
        }
        else
            cout << "The character is not a letter" << endl;
    };
    cin.get();
} 

また

#include <cctype>
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;
int main()
{
    string s;
    cout << "Enter a string: ";
    cin >> s;

    transform(s.begin(), s.end(), s.begin(), [](char ch)
    {
       return isupper(ch)? tolower(ch) : toupper(ch);
    });
} 

試してみた場合g++:g++ test.cpp -o test -std=c++11コンパイルします。

于 2013-03-04T08:28:26.097 に答える