2017-03-20 15 views
-1

私は構造C++で最初の文字を大文字に変換するにはどうすればよいですか?

struct StudentRecord{ 
char StudentFamilyName[20] 
}gRecs[50]; 

cout << "Family Name: "; 
cin >> gRecs[50].StudentFamilyName; 
char str[20]; 
str[20] = toupper(gRecs[i].StudentFamilyName[0]); 
cout << str; 

が下部ケースとして 大文字として姓の最初の文字と、残りを保存するために私は何をしたいですか?それ、どうやったら出来るの? toupperを使用しましたが、実装しても機能しません。誰か助けてくれますか?ありがとうございました。

注:これは試験問題でした。

+0

は 'ので、我々は何を伝えることができます)(あなたは' TOUPPERを使用する方法を表示間違っていた。 – Barmar

+2

「うまくいかない」というのは、役に立つ問題の説明ではありません。 –

+0

私の悪い申し訳ありません:(私はそれを編集しました – AST

答えて

1

問題はtoupperではありません。実際には2つあります。

cin >> gRecs[50] 

gRecsサイズ50であるので、インデックス50が範囲外です。あなたは何も取り込まないされてstrを宣言し、gRecs[1]など

char str[20]; 
str[20] = toupper(str[0]); 

をし、その後にtoupperを呼び出す:あなたは

cin >> gRecs[0].StudentFamilyName; 

番目のレコードを使用することになり、最初のレコードの中に挿入するにはそれ。 インデックス([20])は21番目の文字です(範囲外です)。 strtoupperの21番目の文字を変換しようとしています。

何が必要なのようなものです:

// i is the index into your student records array, possibly in a loop 
cin >> gRecs[i].StudentFamilyName; 
gRecs[i].StudentFamilyName[0] = toupper(gRecs[i].StudentFamilyName[0]); 
2

はここで文字の算術演算を使用して文字列を大文字にする方法は次のとおりです

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


string ToCapitalize(string input) 
{ 
    if (input.length() > 1 && input[0] >= 'a' && input[0] <= 'z') 
    { 
     input[0] -= 32; 
    } 
    return input; 
} 

int main() { 

    std::string StudentFamilyName("smith"); 
    cout << StudentFamilyName << std::endl; 
    cout << "Capitalized: " << ToCapitalize(StudentFamilyName) << endl; 
} 
関連する問題