家の中でのこだわりスペースはどこですか?

typedef struct
{
char FamilyName[32];
char FirstName[32];
int Score[5];
} Student;
void str_toupper(???)
{
for(i=0;i<50;i++){ //生徒50人いる設定
int m;
while (data[i].FirstName[m]) {
data[i].FirstName[m] = toupper(data[i].FirstName[m]);
m++;
}

構造体の名前欄?を小文字から大文字に変換する方法が知りたいです。
文字列を大文字変換する方法はわかるのですが、構造体になるとどうすればよいかわかりません。
こうかなと、上のようにがんばってみましたが、全然できませんでした。

A 回答 (3件)

No2です。


void str_toupperを文字列を大文字に変える関数として作成し、
それを呼び出すようにしました。
1.strを大文字に変えるために、str_toupperを呼び出しています。
2.その結果を印字しています。
3.2人分の生徒のデータを設定しています。
4.2人分の生徒のFamilyNameとFirstNameを大文字に変えるために、
str_toupperを呼び出しています。
5.その結果を印字しています。

---------------------------------------------------
#include <ctype.h>
#include <stdio.h>
#include <string.h>
typedef struct
{
char FamilyName[32];
char FirstName[32];
int Score[5];
} Student;
void str_toupper(char s[])
{
int i;
i = 0;
while(s[i]){
s[i] = toupper(s[i]);
i++;
}
}
int main(void)
{
int i;
Student data[50];
int counter;
char str[] = "abcXYZ%#vv";
str_toupper(str);
printf("after str=[%s]\n",str);
//生徒2人分設定
strcpy(data[0].FamilyName,"saito");
strcpy(data[0].FirstName,"takao");
data[0].Score[0] = 10;
data[0].Score[1] = 11;
data[0].Score[2] = 12;
data[0].Score[3] = 13;
data[0].Score[4] = 14;
strcpy(data[1].FamilyName,"suzuki");
strcpy(data[1].FirstName,"masaru");
data[1].Score[0] = 20;
data[1].Score[1] = 21;
data[1].Score[2] = 22;
data[1].Score[3] = 23;
data[1].Score[4] = 24;
counter = 2; //生徒2人いる設定
for(i=0;i<counter;i++){
str_toupper(data[i].FamilyName);
str_toupper(data[i].FirstName);
}
for(i=0;i<counter;i++){
printf("%d番目の生徒\n",i+1);
printf("%s\n",data[i].FamilyName);
printf("%s\n",data[i].FirstName);
}
return 0;
}

---------------------------------------------------
実行結果
after str=[ABCXYZ%#VV]
1番目の生徒
SAITO
TAKAO
2番目の生徒
SUZUKI
MASARU
    • good
    • 0
この回答へのお礼

できました!!ありがとうございます!
Studentを書かなくてよいのですね。
2人分のデータを入力していただいたおかげでとても分かりやすかったです。
FirstNameの1文字目だけの場合は、FirstName[0]を入れればできますかね。

お礼日時:2021/03/04 19:03

とりあえず、今の状態をいかして、なおすなら、


int m;の次の行に
m = 0;
を挿入すればOKです。( {}の対応がとれていないのは直してください)
    • good
    • 0
この回答へのお礼

たしかに抜けていました。ご指摘ありがとうございます。

お礼日時:2021/03/04 19:03

構造体と思うから出来ないんじゃないでしょうか?


文字列を大文字変換する方法を、
構造体の文字列メンバに適応させればいいだけです。

大文字変換する関数を作ってあるなら、

FamilyNameとFirstNameのメンバを個別に両方
大文字変換する関数に渡すだけです。
    • good
    • 0
この回答へのお礼

No.3さんの回答をみておっしゃっていることが理解できました。
確かに構造体を意識しすぎなのかもしれません、、
回答ありがとうございます。

お礼日時:2021/03/04 19:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報