アルファベットと数値が混在する文字列の中から数値を切り出し、その数値を配列に格納するという処理を実装したいのですが、解決方法が見つかっていません。
文字列の中に出現するアルファベットは最大4つ
出現するアルファベットは1文字
となります。
[A100B20C3000D40]
という文字列から
[100]
[20]
[3000]
[40]
を抜き出し別変数に格納するのが目的です。
どのような方法が考えられるかご教示いただければと思います。
自己解決ができておらず、コードがかけていない状況で申し訳ありませんがどうぞよろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
C
1#include <stdio.h> 2#include <ctype.h> 3#include <string.h> 4 5int main(){ 6 char str[] = "A100B20C3000D40"; 7 8 char out[100]; 9 int istr=0; 10 int iout=0; 11 12 printf("<<sample1>>\n"); 13 for(istr=0; istr<=strlen(str); ++istr){ 14 if(isdigit(str[istr])){ 15 out[iout] = str[istr]; 16 iout++; 17 out[iout] = '\0'; 18 }else if(iout){ 19 printf("%s\n",out); 20 iout=0; 21 } 22 } 23 24 printf("<<sample2>>\n"); 25 char *p, *q; 26 p=str; 27 while(q=strtok(p,"ABCDEFGHIJKLMNOPQRSTUVWXYZ")){ 28 p=NULL; 29 printf("%s\n", q); 30 } 31}
サンプル2は、関数strtok
が元のstr
の中身を書き換えますので、注意してください。
投稿2018/09/01 22:33
編集2018/09/01 22:34総合スコア84421
0
これは正規表現の問題と考えることができます。
そのため正規表現ライブラリを使う方法と、その簡易版を実装する方法があります。
ここでは先頭から対象の文字列をチェックしていく方法を考えます。
ポインタstrに対象文字列が格納してあるとします。
str を先頭からチェックしていく位置をpで確保します。
そうすると,例えばfor文をつかって次のように書けるでしょう。
c
1#define MAX_NUM 5 // 先頭がアルファベットでない場合最大5個 2const char *str="A100B20C3000D40"; // 3unsigned long long result[MAX_NUM]; // 答の格納先 4char i=0; //格納位置 5unsigned long long work = 0; 6 7 8// 文字列 str を先頭からチェックする 9for(char *p = (char*)str;p!=¥0;p++) 10{ 11... 12... 13}
次に、肝心の処理部分ですが、2パターンを考えます。
現在の文字位置が数字であるかどうか 数字であればworkを計算します。
数字でなければ、つまりアルファベットか文字列終端であれば、今までの数字を結果に格納します。
数字であれば、
WORKは今までの位置の数字なので10倍して現在の位置の数字を足せばいいでしょう。
数字でなければ
WORKを結果の格納し、次の格納場所を用意し、WORKをクリアすればいいでしょう。
c
1if ( is_number_char(*p) ){ 2 work = work *10 + (*p - '0'); 3} else { 4 result[i]=work; // 5 i++; 6 work=0; 7} 8 9} //for ループの終り 10result[i]=work; // 最後のアルファベット以降の結果
ここで is_number_char は 数字かどうかを判定する関数です。
c
1int is_number_char(c){ 2 return (('0' <= c) && (c <='9')) 3}
投稿2018/09/01 22:21
総合スコア1088
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/01 23:40
2018/09/02 01:38