質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
C

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

Q&A

解決済

3回答

1022閲覧

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

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

#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ページで確認できます。

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PondVillege

2022/11/04 09:36

もしかして変換対象は大文字と小文字が混ざっているのですか? 小文字の場合は32を引くだけで良いですが,大文字は何もしないよう,分岐処理が必要ですよ?
fana

2022/11/04 09:42

> name_oomoji[i]=i-32 などとしてみましたが i は0からカウントアップしているだけの変数だから,そいつから32引くことは所望の処理ではないであろう. char name_komoji[] というやつの中に元々の小文字なデータが入っているのであれば,少なくともそのデータを処理に用いる必要があるのではあるまいか.
退会済みユーザー

退会済みユーザー

2022/11/04 09:49

>>ps_aux_grep 変換対象に大文字は含まれないです。ただ氏名になるので苗字と名前の間に空白(32)を入れたいのです。 while (name_komoji[i] != 0) { name_oomoji[i]=name_komoji[i]-'a'+'A'; i++; } name_oomoji[i]=...の前にif(i=!32)と分岐させようとしましたが、実行しても何も起きなくなってしまいます。
PondVillege

2022/11/04 09:56

では,その分岐方法が悪いです. そのようなtrial and errorに関して質問の内容を編集し,まとめてください.
1T2R3M4

2022/11/04 10:08

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14270528179 以下ご対応ください。 https://teratail.com/help#posted-otherservice teratailでは、マルチポスト※の推奨はしていません。 やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。
退会済みユーザー

退会済みユーザー

2022/11/04 10:13

粘着
guest

回答3

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

総合スコア11708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/11/04 10:36 編集

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

2022/11/04 10:39

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

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

総合スコア12760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

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

投稿2022/11/04 10:14

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/11/05 06:24

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問