※ ChatGPTを利用し、要約された質問です(原文:文字列の中から1~5桁の数字を抜き出したい)
文字列から数字を抜き出す方法
このQ&Aのポイント
文字列の中から1~5桁の数字を抜き出す方法がわかりません。
ソースコードにはキャスト演算子を試しましたがうまくいきませんでした。
現在の実装方法ではコードが冗長になってしまいます。よりスマートな実装方法があれば教えてください。
ある命令プログラムを作っているのですが、文字列の中に命令語を書いてその後に続く数字を抜き出したいのですがうまくいきません
ソースを見ていただきたいのですが
@ke の命令語の後で1~5桁の数字を記載しているのですが
数字の部分を文字から数字に変えたいのです。
その後
@ke 数字
を正式な命令文として扱いたいのですがソースを見ていただけるとわかると思いますが問題があります。
・文字をatoiで数字に変換できない(キャスト演算子を変えてもだめだった)
・ソースのプログラムの書き方ではやたらと長々しくなってしまう。
どのようにしたら問題が解決できますか?
----以下ソース----
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(){
char kei[100]="abc@ke 4567def@ke 789";
int i=0;
int g=NULL;
while(i<15){
if(kei[i]=='@'){
i++;
if(strnicmp(&kei[i],"ke ",3)==0){
i+=3;
//後に続く数字を抜き出して処理したい
if(isdigit(kei[i])){
if(isdigit(kei[i+1])){
if(isdigit(kei[i+2])){
//・・・・以下全部で5桁分の数字を判定していく けど正直こんなややこしい方法をとらなくてもスマートにできるはず
}
else{
g=(atoi(kei[i])) * 10 +atoi(kei[i]); //型名が違うからatoiに入らないといわれる
}
}
else{
g=atoi(kei[i]); //型名が違うからatoiに入らないといわれる
}
}
else{
printf("\n命令の仕方が間違っています\n");
}
}
}
else{
printf("%c",kei[i]);
i++;
}
}
return 0;
}
補足
ありがとうございます。 こんな感じにできました。 今のままだと5桁以上も読み取ってしまうので改良が必要ですが ---以下ソース--- #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> int main(){ char kei[ 100 ] = "abc@ke 4567def@ke 789"; int i=0; int j; int g=NULL; while(i<21){ if(kei[i]=='@'){ i++; if(strnicmp(&kei[i],"ke ",3)==0){ i+=3; if(isdigit(kei[i])){ g=atoi(&kei[i]); for(j=1;j<5;j++){ if(isdigit(kei[i+j])){ g=g; } else{ break; } } } else{ printf("命令の仕方が間違っています\n"); } //数字格納できました 処理します。 printf("\n\n%d\n\n",g); } } else{ printf("%c",kei[i]); i++; } } return 0; }