おねがいします!

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あや

おねがいします!

#1

投稿記事 by あや » 15年前

ポインタstrが文字列の先頭要素を表している時、その文字列に含まれる数字、符号+及びー以外の文字を削除する関数 void del_char(char *str) を作成しなさい。例えば、文字列が A-+1BC2+3D/0であれば-123とする。なお符号についても、数字より前にある最初のもの以外は、削除するものとする。
っていう問題なんですが、教えてもらえませんか?

kazuoni

Re:おねがいします!

#2

投稿記事 by kazuoni » 15年前

先頭から順に見ていって、
1、現在対象の文字が符号かどうか(符号文字が出たかどうか)
2、現在対象の文字が数字かどうか→数字ならキューにpush
3、1、2を繰り返し、すべて終わったら、(あれば)符号文字とキューからpopしたものを組み合わせる

自分ならばそんな風にやるかもしれないです。

AYA

Re:おねがいします!

#3

投稿記事 by AYA » 15年前

すごいですね!!
1,2,3,を記号で書くとどうなりますか?

kazuoni

Re:おねがいします!

#4

投稿記事 by kazuoni » 15年前

あ、名前は変えない方がいいです。誰が質問者さんかわからなくなってしまいますから。。

>1,2,3,を記号で書くとどうなりますか?

記号・・・?

あや

Re:おねがいします!

#5

投稿記事 by あや » 15年前

すみません。。。
1,2,3をemacsに打ち込む時の文字です。。。

mnkr

Re:おねがいします!

#6

投稿記事 by mnkr » 15年前

記号・・・というのは恐らくソース(英字)のことかと思います。。。

kazuoniさんの書いていることを理解しようとしていますか?
宿題のまるなげな気がします。

あや

Re:おねがいします!

#7

投稿記事 by あや » 15年前

宿題なのはあたりです。。。
やり方が全然わからなくて。。。
キューって何ですか?

kazuoni

Re:おねがいします!

#8

投稿記事 by kazuoni » 15年前

っということは、まだC言語はほぼ入門ですかね^^;
まぁ、あえてキューなんて使わなくてもいいので、忘れてください。

この掲示板の規約の通り「宿題の丸投げ」は厳禁です。
なので、考え方の一つとして、自分はNo:42554の回答を書きました。

まず、授業でどこまでやっているかを見直してください。
一番最初にポインタをと書かれているので、文字列操作の一環の宿題かなと思います。
一番簡単な考え方は、
0、関数del_charに渡された文字列(のポインタ)strを関数del_charのローカル変数である文字列配列(変数名temp)にコピーする
1、tempを先頭から最後(\0)まで探査し、(初めに登場する)記号文字(+ or -)を見つけ、その文字をstr[0]に格納する
2、tempを先頭から最後(\0)まで探査し、登場した0~9はstr[1]以降に順に格納していく
3、すべて終了したら、strの最後に'\0'を格納する

こんな感じでいいかと思います。

あや

Re:おねがいします!

#9

投稿記事 by あや » 15年前

すみません。ありがとうございます。
順番通りにやって行ってみます!!!

たかぎ

Re:おねがいします!

#10

投稿記事 by たかぎ » 15年前

こんな感じでは?
#include <stdio.h>
#include <ctype.h>

void del_char(char *str)
{
	char *ss;

	for (ss = str; *ss != '\0'; ss++)
	{
		int c = (unsigned char)*ss;

		if (isdigit(c) || c == '+' || c == '-')
		{
			*str++ = c;
			break;
		}
	}
	for (; *ss != '\0'; ss++)
	{
		int c = (unsigned char)*ss;

		if (isdigit(c))
			*str++ = c;
	}
	*str = '\0';
}

int main(void)
{
	char s[/url] = "A-+1BC2+3D/0";
	del_char(s);
	puts(s);
	return 0;
}
ただし、文字列が"A-+1BC2+3D/0"のときの結果は"-1230"になります。
言外の仕様が潜んでいるかもしれませんね。

あや

Re:おねがいします!

#11

投稿記事 by あや » 15年前

ありがとうございます!!!
よくわかりました。うれしいです!!!

あや

Re:おねがいします!

#12

投稿記事 by あや » 15年前

すみません。この答えてもらった文中でint型の変数cに代入するのに(unsigned char)とキャストしているのはどうしてですか?わかる方お願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る