🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

Q&A

2回答

2235閲覧

文字列(数字、アルファベット(大文字、小文字)、その他)を入力して種類別に抽出

skateboard

総合スコア0

C

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

0グッド

1クリップ

投稿2020/12/15 09:56

編集2020/12/15 14:18

C言語で文字列(数字、アルファベット(大文字、小文字)、その他)を入力し、ポインタを利用した関数で、文字列より種類別の文字列を抽出し表示する。

例:
入力:0a!C1%

出力:
数字:01
英字:aC
他:!%

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

#define NUM 201

int extnum(const char *s, char *m);

int main(void){
char str[NUM],num[NUM];
int num_cnt;

printf("文字列:"); scanf("%s",str);

num_cnt=extnum(str,num);

printf("数字文字数:%d\n",num_cnt);

return(0);
}

int extnum(const char *s,char *m){
int cnt=0;
int c;
while((c=*s++)){
if('0'<=c&&c <='9'){
if('a'<=c&&c<='z'){
if('A'<=c&&c<='Z'){
if((0x00<=c&&c<=0x2f) ||
(0x3a<=c&&c<=0x40)||
(0x56<=c&&c<=0x60) ||
(0x7b<=c)){
cnt++;

} } } }

}

printf("\n");
return(cnt);
}

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

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

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

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

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

hentaiman

2020/12/15 10:00

大至急勉強しましょう
Daregada

2020/12/15 10:08 編集

教えている立場から言うと、「文字列の入力処理」、「ポインター変数の利用」といった段階まで来ていて、「ソースコードをどのように書いたらよいのかわかりません」というのはもはや手遅れです。せめて「書いてみたけど思ったように動きません」ぐらいになるように頑張りましょう。 とか書いてたら質問が修正されたわ。
YT0014

2020/12/15 10:18

数字を0から9の場合、としたのなら、英字は、英字小文字か英字大文字に含まれているとして、判定しましょう。 その他は、数字でも英字でもない、という判定になります。否定(notとか!)を学んでいればそれを使って、学んでいないならば、if else を使って、考えてみてください。
fana

2020/12/15 10:23

「関数extnum()の第二引数ってコレ何のためにあるんですかね?」 とか,そのコードを書いてる最中に自分自身で疑問に思わないのでしょうか? …といった感じで現コード自体に不安が見られますし, 「数字の抽出はできるけども英字版を作れない」とかいう事態はまず考えられないので, 英字 や その他 の方に話を進めるよりも前に, まずは数字だけの状態でしっかりコードと頭の中身を共に整えるべきでしょう.
Daregada

2020/12/15 14:07

個人情報がダダ漏れ。
guest

回答2

0

このソースコードをどのように書いたらよいのかわかりません

ならばいちばん愚直に、以下のように書きましょう。

数字のみをプリントする疑似コード:

for ( i = 0; i < 文字列の長さ; ++i ) { if ( 文字列のi番目の文字が数字 ) { 文字列のi番目の文字をプリントする } }

英字/その他 についても同様。

投稿2020/12/15 10:10

episteme

総合スコア16612

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

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

0

int extnum(const char *s, char *m);

がちゃんと動作しているのなら、それをコピー&ペーストしたものを元にして英字抽出関数と記号抽出関数を作ってそれを呼び出すのが手っ取り早いと思います。
(冗長な部分が多くなりあまり良いやり方ではありませんが、一応目的の値を取得することはできると思います。)

投稿2020/12/15 10:22

hidezzz

総合スコア1248

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問