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

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

ただいまの
回答率

90.50%

  • C

    4524questions

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

C言語 小文字判定関数の作成について

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 305

lapo

score 3

用意された文字列の中から、アルファベットの小文字だけを検知する関数を作る課題があるのですが、アルファベットが大文字であるか小文字であるかの判定をするロジックに躓いております・・。よろしければ教えていただけると幸いでございます。
下記に現在まで入力しているコードを添付いたしました!

コード
#include <stdio.h>
#include<string.h>


/* プロトタイプ宣言 */
void getAlphabet(char check);

int main (void)
{
    char result[]; /* 構造体"result"を宣言 */
    char check[] = "abcd1234efgh";/* 構造体"check"に文字列を代入*/

    result = getAlphabet(check); /* GetAlpha関数の結果を"result"に代入 */
    printf("アルファベットの小文字だけ出力します[%c]\n",result);
    return 0;
}


/* チェック関数 */
void getAlphabet(char check)
{
    char count;/* ループ用の変数"count"を宣言 */
    /* 構造体checkに代入された文字列の長さの分ループさせる */
    for(count=0;count<=(strlen(check))-1;count++)
    {
        /*check[]に代入されているアルファベットが小文字かどうか判定*/
        if(check[count]>='a')&&(check[count]<='z');
        {

        }
    }

}


追記
最終的にはアルファベットの小文字をprintfで出力したいです!
このような関数で出力するにはどうしたらよいでしょうか・・・。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dice142

    2018/11/07 13:16

    具体的に何ができなくてつまずいているのかを記載されると的確な回答が得やすいかと思います。

    キャンセル

  • lapo

    2018/11/07 13:24

    アドバイスありがとうございます。最終的にはアルファベットの小文字をprintfで出力したいのですが、自作の関数内部で文字列のアルファベットの大文字小文字をどう判定すればいいのか悩んでいました!

    キャンセル

  • dice142

    2018/11/07 13:26

    ここはデフォルト非表示なので、他の回答者様にも見てもらいやすいように、質問文を修正して記載された方が良いです。

    キャンセル

  • lapo

    2018/11/07 13:28

    たびたび申し訳ございません! ありがとうございます!

    キャンセル

回答 4

+1

#include <stdio.h>
#include <string.h>

int main(void)
{
    //小文字だけを取り出す。
    char text[] = "abcd1234efgh";
    int n = strlen(text);
    int i;

    for(i = 0; i < n; i++){
        if('a' <= text[i] && text[i] <= 'z'){
            printf("%c",text[i]);
        }
    }

    return 0;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/07 14:45

    ありがとうございます! 前提としては自分の作成しているgetAlphabetの関数を使用して出力したいのですがその場合の書き方も教えていただけませんでしょうか?

    キャンセル

checkベストアンサー

0

気になる点をいくつか。

  • 関数の引数の型とその関数を呼び出し時の型は同じにしましょう。
  • check関数内のループ回数が1回多いです。
  • 小文字の判定はある文字が'a'から'z'までという条件でできます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/07 13:24 編集

    (さすがに質問者がそんな環境でプログラミングしているとは思えませんが)C言語は文字コードに対して「0~9が連続している」ことしか仮定していませんので、EBCDICなど「アルファベットが連続したコードポイントにない」文字コードの環境で動かすことも可能です。

    キャンセル

  • 2018/11/07 13:29

    そういう特殊な文字コード環境は想定してませんでした。
    「課題」とあるので特殊ケースを考慮した回答にしなくても良いかなと思ってます。

    キャンセル

  • 2018/11/07 13:31

    アドバイスありがとうございます! 型をあわせるというのはchar型にあわせるということでしょうか?ループは-1することで対応させていただきました! 条件分は文字コードを参照して、それで条件付けすればいいということですね!

    キャンセル

  • 2018/11/07 13:37

    > 型をあわせるというのはchar型にあわせるということでしょうか?
    引数はchar型に対し、関数の呼び出しではchar型の配列を使っています。
    適切な方に合わせましょう。

    キャンセル

  • 2018/11/07 13:42

    わかりやすい回答ありがとうございます! 配列で合わせてみます。

    キャンセル

0

アルファベットが大文字であるか小文字であるかの判定をするロジックに躓いております

1文字単位であれば、<ctype.h>islowerがあります。

標準で用意してあるものをどんどん使って、本当に必要な部分だけ自分で書くようにしましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/07 13:29

    調べさせていただきましたがこんな関数があるとは知りませんでした!とても参考になります。ありがとうございます!

    キャンセル

0

getAlphabet関数を用いて、コーディングしてみましたがいかがでしょうか。
lapoさんは一度getAlphabet関数で処理したデータをRAMに代入しておりますが、
その関数内で文字列を格納した方が分かりやすいと思います。

#include <stdio.h>
#include <string.h>


/* プロトタイプ宣言 */
void getAlphabet(char* result, char* check);    /* 第1引数:結果格納用、第2引数:検査用文字列 */

int main (void)
{
    char result[256]; /* 構造体"result"を宣言 */
    char check[] = "abcd1234efgh";/* 構造体"check"に文字列を代入*/

    getAlphabet(result, check); /* GetAlpha関数の結果を"result"に代入 */
    printf("アルファベットの小文字だけ出力します[%s]\n",result);
    return 0;
}


/* チェック関数 */
void getAlphabet(char* result, char* check)
{
  int chNum = 0;/* 現在の入力文字列番号 */

  /* 構造体checkに代入された文字列の長さの分ループさせる */
  for (int count = 0; count < (strlen(check)); count++)
  {
      /*check[]に代入されているアルファベットが小文字かどうか判定*/
      if ((check[count] >= 'a') && (check[count] <= 'z'))
      {
        result[chNum] = check[count];
        chNum++;
      }
  }

  return;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/16 23:19 編集

    getAlphabet内でヌル文字はコピーされませんから、return前にヌル文字を代入するか、あるいはchar result[256] = {}; と初期化しなければならないような気がします。

    キャンセル

同じタグがついた質問を見る

  • C

    4524questions

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