dポイントプレゼントキャンペーン実施中!

ポインタstrが文字列の先頭文字を指しているとき、その文字列に含まれる数字、符号’+’及び’-’以外の文字を削除する関数
void del_char(char *str)
を作成しなさい。例えば、A-+1BC2+3D\0であれば-123\0とする。なお、符号についても、数字より前にある最初のもの以外は、削除するものとする。

A 回答 (2件)

この質問は、2ページめにまわされたので、もう回答しても良いでしょう。


回答プラグラムを↓に示します。
プログラムはマイナス符号はともかく、プラス符号もそのまま出力します。不要ならば自分で修正を加えてください。

プログラムの要点は以下のとおりです。
文字配列 buf[] は、サーチ用のポインター char *p と buff[] 内容置き換え用のポインター char *str の2つを用意し、符号フラッグ int hugo=1 として立てて(ゼロでない)おくことと、isdigit() 関数を使うことにあります。
http://www9.plala.or.jp/sgwr-t/c/sec07.html
プログラムは while() を使いますが、判定は c=*p の1バイト代入結果からステータスレジスターの zero フラッグが反応するのを利用しています。
http://en.wikipedia.org/wiki/Status_register
それが c=*p を使う理由です。慣れないと「???」となりますが、慣れないうちは while((c=*p)!='\0') としても構いません。



#include <stdio.h>
#include <ctype.h> //isdigit()
void del_char(char *); //プロトタイプ宣言

int main(void)
{
char buff[]="A-+1BC2+3D";
printf("buff[]= %s\n",buff);
del_char(buff);
printf("result= %s\n", buff);
return 0;
}

void del_char(char *str)
{
char *p;
int c,hugo=1;
p=str;
while(c=*p){
if(hugo && (c=='+' || c=='-') || isdigit(c)) {
hugo=0;
*str++=c;
}
p++;
}
*str='\0';
}




----- 実行結果 -----
buff[]= A-+1BC2+3D
result= -123
    • good
    • 0

疑問点を明確にしてください。


問題を見せられただけでは残念ながら質問の内容がわかりません。
普通に1文字ずつ判定していけばいいと思いますけど。
不要な文字を消すときはmemmoveとか使うかな。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!