• ベストアンサー

C言語での大文字小文字の変換について

C言語をはじめて使ったのですが、名前や名字をアルファベットで入力したとき、頭だけ大文字にして残りを小文字になるようにしたいのですがなかなかうまくできません。(たとえば…akiraと入力した時、Akiraとなるようにしたい) イニシャルのように A.B みたいにはできるのですが

質問者が選んだベストアンサー

  • ベストアンサー
  • Amanjaku
  • ベストアンサー率30% (219/716)
回答No.2

scanf実行時 aaの中身は aa[0] : 'a' aa[1] : 'k' aa[2] : 'i' aa[3] : 'r' aa[4] : 'a' aa[5] : 0 aa[0]を大文字に置き換える。 実際にはaa[0]が小文字であることを検証すべき

4960224
質問者

お礼

ありがとうございます。 置き換えに注意してやってみます。

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>頭のアルファベットを大文字にするには >a=aa[0],b=bb[0]; >A=a+('A'-'a'); >B=b+('A'-'a'); > >で、ここまではいいと思うのですが よろしくないです。 大文字に変換する関数 toupper() を使うべきです。

4960224
質問者

お礼

ありがとうございます。 なんとかやってみます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>なかなかうまくできません。 もっと具体的に。どの辺が「うまくいかない」かを補足にどうぞ。 不明な点は「頭だけ」をどう判別するか、ですかね。 例えば、 hayashi,akira を Hayashi,Akira としたいですか? Hayashi,akira でよいですか?

4960224
質問者

補足

すみません補足します。(補足になってるかわかりませんが) 頭の部分だけとは 「hayashi,akira」 を 「Hayashi,Akira」 のようにしたいです。 char aa[10],bb[10],a,b,A,B; printf("名前をアルファベットで\n"); scanf("%s",aa); printf("名字をアルファベットで\n"); scanf("%s",bb); としたとき、 頭のアルファベットを大文字にするには a=aa[0],b=bb[0]; A=a+('A'-'a'); B=b+('A'-'a'); で、ここまではいいと思うのですが、次をどのようにすれば頭が大文字で残りを小文字なるのかがわかりません。

関連するQ&A

  • C言語:文字列の並び替え

    3つの文字列を入力して、昇順に並び替えを行う方法教えて下さい。 例えば、 AKIRA AKIKO AIKOSANN と、入力されたら、 AIKOSANN AKIKO AKIRA   となるようにアルファベットが早い順に並びかえを行いたいのです。 わかる方、助けてください!

  • c言語の再帰について教えてください。

    c言語を勉強してるんですが、再帰のイメージがなかなかつかめません。 例えば、入力した文字列を逆から一文字ずつ表示させるのには どうしたらいいのか教えてください! 入力:ABCDE E D C B A ソースで処理される順序など説明等していただけたらうれしいです。

  • 多言語の正確な大文字→小文字の変換

    EXCELでの質問です。 フランス語、ドイツ語など各国の言語で書かれた ファイルがあります。 例: DACQUOISE TARTE TATIN RATATOUILLE これを Dacquoise Tarte Tatin Ratatouille の様に頭文字だけ大文字で他は小文字にしたいのです。 実際には、各言語特有のaやeに「'」や「~」といった アクセント記号や各言語特有のアルファベットが存在しています。 関数では、変換した際に英語表記('や~がなくなってしまう)になってしまい困っています。 上記の様なレシピなどがまとまっており、数は1000以上あるため手動では無理なのですが、良いアイデアはないでしょうか。

  • C言語でこんなことは可能ですか?

    現在あるプログラムを作りたいと思いC言語の勉強をしています。 それに伴い、下記のプログラムはC言語で作成可能でしょうか。 例) Aのフォルダ内にbというファイル(txt)があるとして、 bのファイル内の「ありがとう」という文字を検索し表示させるプログラム は作成可能でしょうか。表記としては --------------------------------- ファイル名 | 検索文字 ---------------------------------  A    | ありがとう  -------------------------------- としたいと思っているのですが・・・ よろしくお願いします。

  • 【C言語】入力された文字種別ごとにカウント

    以下のように実行したいのですが、 どのように組んだら良いのでしょうか? 宜しくお願いします。 言語はC言語で、環境はVisual C++ 2010 Express Editionを使っています。 ちなみに最後の方に現在のコードがあります。 ///////////////////////////////////////////// 文字を入力しなさい(終了条件:Ctrl+Z) abcdef678ABCDEFopuKLH ghtJK+ghjBBBdgjk ^Z a : 1個入力 b : 1個入力 c : 1個入力 d : 2個入力 e : 1個入力 f : 1個入力 g : 3個入力 h : 2個入力 i : 0個入力 j : 2個入力 k : 1個入力 l : 0個入力 m : 0個入力 n : 0個入力 o : 1個入力 p : 1個入力 q : 0個入力 r : 0個入力 s : 0個入力 t : 1個入力 u : 1個入力 v : 0個入力 w : 0個入力 x : 0個入力 y : 0個入力 z : 0個入力 A : 1個入力 B : 4個入力 C : 1個入力 D : 1個入力 E : 1個入力 F : 1個入力 G : 0個入力 H : 1個入力 I : 0個入力 J : 1個入力 K : 2個入力 L : 1個入力 M : 0個入力 N : 0個入力 O : 0個入力 P : 0個入力 Q : 0個入力 R : 0個入力 S : 0個入力 T : 0個入力 U : 0個入力 V : 0個入力 W : 0個入力 X : 0個入力 Y : 0個入力 Z : 0個入力 /////////////////////////////////////// #include <stdio.h> #include <conio.h> #define ALPHABET_COUNT 52 int main(void) { // 入力アルファベットの個数を数えるカウンタは大きさ 52 の配列で用意。 int counter[ALPHABET_COUNT]; int c; int i; // 最初に、配列の 52個の要素すべてを0クリアする for(i=0;i<52;i++){ counter[i] = 0; } printf("文字を入力しなさい(終了条件:Ctrl+Z)\n"); while(1){ c = getchar(); if(c == EOF){ break; } if(c >= 'a' && c <= 'z'){ //65<90 counter[c-'a']++; } else if(c >= 'A' && c <= 'Z'){ //97<122 counter[c-'A']++; } } // 文字種別の個数表示する c = 'a'; for(i=0;i<ALPHABET_COUNT;i++){ if(i<26){ printf("\t%c : %3d個入力",c++,counter[i]); if(((i+1)%3) == 0){ printf("\n"); } } else{ if(i==26){ printf("\n"); c = 'A'; } printf("\t%c : %3d個入力",c++,counter[i]); if(((i+2)%3) == 0){ printf("\n"); } } } printf("\n"); /* c = 'a'; for(i=1;i<=26;i++){ printf("\t%c : %3d個入力",c++,counter[i-1]); if(i%3 == 0){ printf("\n"); } } printf("\n"); */ }

  • 文字列を数列に変換

    文字列(アルファベットのみ)を数列に変換するプログラムを作りたいのですが、うまくいきません。 [A = 01、B = 02、~ Z = 26、 Space = 00]とし、例えば入力が「ADAM」であれば、出力は「01040113」となるようなプログラムです。A~Z以外の文字(!, ?, @, 1, 2など)は無視します。 ちなみに言語はJavaです。 誰かご教授いただけないでしょうか?

    • ベストアンサー
    • Java
  • C言語のCってなんですか?

    あまりプログラムとは関係ありませんが、何でCなのかがわかりません。 A,B,CときてCなのか、何かの単語の頭文字なのかはっきりさせたいです。 よろしくお願いします。

  • C言語 

    C言語でAとBがじゃんけんをして勝ち負けを出力するプログラムをつくりたいのですが、間違いを教えてください。(AがgでBがcならAの勝ち。AがgでBがpならBの勝ち。AがgでBがgなら引き分け。) #include<stdio.h> #include<conio.h> void main() { int A,B; printf("文字を入力せよ"); scanf("%d",&A); scanf("%d",&B); if(A=='g'||B=='c') { printf("Aの勝ち"); } if(A=='g'||B=='p') { printf("Bの勝ち"); } if(A=='g'||B=='g') { printf("引き分け"); } getch(); }

  • Excelで、ある列に入力している文字にa,b,cと付け加えたい

    Excelで次のようなことをする方法を教えて下さい。 一つの列に次のように入力されています。 0001 0001 0001 0002 0002 0003 0003 0003 0003 0004 このあと0005、0006、・・・・と千行ほど続きます。 (上の例では0001が3行、0002が2行続いていますが、 同一のものが何行続くかに規則性は無く、一行のみのものや8行 くらい続くものもあります) これにa,b,cを加えて 0001a 0001b 0001c 0002a 0002b 0003a 0003b 0003c 0003d 0004a というように同じ文字が並んでいる間はa,b,c・・・と付け加えられ 文字が0001から0002などに変化すると付け加えられるアルファベットがaにもどって、そこから文字が変化するまでa,b,cと入力させたいのですが、これを自動的に入力する方法はないでしょうか? よろしくお願いします。

  • 恥ずかしながらC言語解析中のプログラムで!?

    練習問題 5-20 列数を示す数値を入力し、'a'~'z'の文字を指定された列数に従って表示するプログラムを作成しなさい。  以下のプログラムを解析中で、まだ素人で基本的な質問ですがご了承ください。 1) int col; /* 2) char i;/*文字列関数*/ 3) scanf( "%d", &col ); /*英数文字の行に並ぶアルファベットの個数を1~26までの任意の数字を一件入力する。*/ 4) for( i = 0 ; i < 26 ; i++ ){ /*アルファベットは26個はa b c・・・の順番でループする命令*/ 5) if( i > 0 && ( i % col ) == 0 )/*アルファベットのループ範囲はa~です。アルファベット26文字÷3)で入力した数の余りが0・・・? 6) printf( "\n" ); /*結果がでたら改行する。*/ 7) printf( "%c", 'a' + i ); /* 現在解析中*/ 8) } -----------------------------------------------------------------  以上ですが、  5)の==0で、このプログラムでの役割は何ですか?  よろしくお願いいたします。