質問するログイン新規登録

Q&A

解決済

3回答

1195閲覧

C言語 小文字を大文字に変換する処理

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/11/04 09:31

編集2022/11/04 09:36

0

0

先ほども似たような質問をしたのですが、情報不足と投げやり感が否めなかったので再度質問させていただきます。
大学の課題で、小文字を大文字に変換せよというものが出されたのですが、全く理解できず困り果てています。
まずは配られたひな形をご覧ください。

#include <stdio.h>

int main(void)

{

char name_komoji[] = {}; //*ここに任意のASCIIの小文字にあたる数値を入力する char name_oomoji[100]; int i; i = 0; while (name_komoji[i] != 0) // 「!= 0」は省略可 {

//ここに小文字を大文字に変換する処理を書く//
i++;

} name_oomoji[i] = 0; // '\0'と書いてもよい printf("%s\n", name_komoji); printf("%s\n", name_oomoji); return 0;

}

上記が配布されたものです。

私自身、小文字を大文字に変換する処理に name_oomoji[i]=i-32 などとしてみましたが、実行しても小文字しか表示されなかったり、文字化けしたりしてしまいました。
32を引いたり足したりすることは理解しているのですが、その処理をどう書けばよいのか分かりません。
また、任意の小文字を入力する箇所に空白として32を打ち込んだ場合は、-32とすると0となってしまうのですがどうすればよいでしょうか。
回答のほどよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。

回答3件

0

とにかく終わってはいるようですので。

c

1#include <stdio.h> 2 3int main(void) { 4 char name_komoji[] = { 'a','b','c','x','y','z','\0' }; 5 char name_oomoji[100]; 6 int i; 7 8 i = 0; 9 while (name_komoji[i]) { 10 name_oomoji[i] = name_komoji[i] - 'a' + 'A'; 11 i++; 12 } 13 name_oomoji[i] = '\0'; 14 15 printf("%s\n", name_komoji); 16 printf("%s\n", name_oomoji); 17 return 0; 18}

plain

1abcxyz 2ABCXYZ

任意の小文字を入力する箇所に空白として32を打ち込んだ場合

空白は「ASCIIの小文字」ではありませんので想定する必要は無いでしょう。

投稿2022/11/05 06:27

jimbe

総合スコア13504

0

//ここに小文字を大文字に変換する処理を書く// のところでやるべきこととは何か?
といったら,それは,
【 name_komoji[]内の i 番目の文字を大文字に変換した結果を name_oomoji[] の i 番目に格納すること】
であろう.

つまり,こういう話だ:
name_oomoji[i] = 変換( name_komoji[i] );

そしたらとりあえず,上記の「変換」って書いてある箇所を適当な関数名に置き換えれば良いではないか.
あとは,その関数にやってほしい内容を具体的に考える( name_komoji[i] が小文字じゃなかった場合は… などだ).

そしたら,何はともあれ

C

1//(関数の名前を MyToUpper にした) 2// 3//引数の文字に対する大文字を返す. 4//ただし引数が「小文字」じゃないときには引数の値を返す. 5char MyToUpper( char c ) 6{ 7 /* ここはまだどう書くかわからないけれども */ 8} 9 10int main(void) 11{ 12 ...(略) 13 14 //ここに小文字を大文字に変換する処理を書く// 15 name_oomoji[i] = MyToUpper( name_komoji[i] ); 16 17 ...(略) 18}

というところまでは書けるのではあるまいか.
後は,関数 MyToUpper の中身を(注釈に書いた動作をするように)実装するだけだ.
その実装がどんなにダサかろうが,まずはとりあえず動けばよいではないか.
例えば,こんなの↓だって,立派な実装だ.

C

1char MyToUpper( char c ) 2{ 3 const char Tbl1[26+1] = "abcdefghijklmnopqrstuvwxyz"; 4 const char Tbl2[26+1] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 5 6 for( int i=0; i<26; ++i ) 7 { 8 if( Tbl1[i]==c )return Tbl2[i]; 9 } 10 return c; 11}

その後,何かもっと良い書き方とかが見つかったならば,単に MyToUpper の中身を差し替えればよかろう.

投稿2022/11/04 10:33

fana

総合スコア12498

fana

2022/11/04 10:36 編集

まぁ,本件の質問者本人は見もしないのであろうが…… 課題勢な方々はこんな感じで「あとはここさえできればいい」という形に持っていく努力くらいはすべきであろうぞ.
fana

2022/11/04 10:39

ここで示した MyToUpper() の実装は,「特定の文字コードを前提としない」ことを念頭に書いた「真面目な」実装である. (もちろん,単に既存の toupper() を使うなら,そんなこと考える必要も無いのだが)
guest

0

ベストアンサー

自己解決しました。ありがとうございました。

投稿2022/11/04 10:14

退会済みユーザー

退会済みユーザー

総合スコア0

jimbe

2022/11/05 06:24

マルチのようですし、自己解決なのか他者解決なのか微妙は感じがします。
guest

この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問