C言語の文字列について

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

C言語の文字列について

#1

投稿記事 by 馬鹿太郎 » 16年前

すいません、どなたか教えていただけないでしょうか

 文字列str内の全ての数字文字を削除する関数void del_digit(char str[/url])を使うんですけど、
この呼び出された関数del_digitのstrとmain関数のstrは別個のものですよね。それなのにdel_digit関数
の処理が終わったあとmain関数に戻ったら配列strの中身が変わっています。
 あと、str[idx++] = strはどういう意味なのでしょうか?
 この0未満、9以上はどういう意味なのでしょうか?
 よろしければ、教えてください。

#include <stdio.h>

void del_digit(char str[/url]);

int main(void)
{
char str[100];

printf("文字列を入力してください:");
scanf("%s", str);

del_digit(str);

puts("数文字を削除しました。");
printf("str=%s\n", str);

return 0;
}

void del_digit(char str[/url])
{
int i = 0, idx = 0;

while (str) {
if(str < '0' || str > '9') {
str[idx++] = str;
}
i++;
}
str[idx] = '\0';
}

たいちう

Re:C言語の文字列について

#2

投稿記事 by たいちう » 16年前

> この呼び出された関数del_digitのstrとmain関数のstrは別個のものですよね。それなのにdel_digit関数
> の処理が終わったあとmain関数に戻ったら配列strの中身が変わっています。

2つのchar*型の変数strは別のものですが、同じ配列のアドレスを値として持ちます。
この辺はポインタの基本ですので、参考書などの該当部分を良く読みなおしてください。

>  あと、str[idx++] = strはどういう意味なのでしょうか?

数字を削除ということで、削除した分、前に詰めているのですね。

>  この0未満、9以上はどういう意味なのでしょうか?

9以上ではなく、9より大きい、です。
strがこの条件を満たす場合、文字を詰める処理を行い、
この条件を満たさない場合、すなわち、数字の場合は何も処理を行わないことで、
数字を削除しています。

"a2c"などの短い文字列をdel_degitに渡して、
デバッガで処理を追いかけてみてください。

馬鹿太郎

Re:C言語の文字列について

#3

投稿記事 by 馬鹿太郎 » 16年前

以下のことがわかりません。

・0未満、9より大きいとどうして文字として処理されるのですか?

・「デバッカ」の意味を調べたらバグを取り除く装置だとありました。このデバッガで処理を追いかけるとは
 どういう意味なのでしょうか?


kazuoni

Re:C言語の文字列について

#4

投稿記事 by kazuoni » 16年前

ttp://charset.7jp.net/jis.html
をみればわかるのですが・・・
'A'は文字定数っといって、int型で、
'0'~'9'は参照ページのように、連続していることが定義されています。

環境によると思いますが、
visual c++ならばブレークポイントがそれにあたります。
実行を一時停止して、変数の移り変わりを見るということです。

たいちう

Re:C言語の文字列について

#5

投稿記事 by たいちう » 16年前

> ・0未満、9より大きいとどうして文字として処理されるのですか?

より正確には文字コードの比較をしています。
数字の文字コードは、0の文字コード以上 かつ 9の文字コード以下ですので、
この条件の逆を文字として処理しています。

> 「デバッカ」の意味を調べたらバグを取り除く装置だとありました。
> このデバッガで処理を追いかけるとはどういう意味なのでしょうか?

デバッカではなく、デバッガです。
この単語を使うときは、通常、バグを取り除く装置ではなく、
バグを見つけるときに助けてくれるプログラムを指します。

使えるデバッガが無いのでしたら、短い文字列をdel_degitに渡し、
コンパイラになったつもりで、変数がどう変わるか一行ずつ考えてみてください。

馬鹿太郎

Re:C言語の文字列について

#6

投稿記事 by 馬鹿太郎 » 16年前

ありがとうございます^^

閉鎖

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