【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.19487

STRTOK関数について
投稿者---ちゃ(2005/01/26 10:48:17)


STRTOK関数についてですが、
例えば

A<tab>B<tab>C<tab>D<tab>E

という文字列を<tab>区切りでSTRTOKで分割すると
A
B
C
D
E
となりますが、

下記のような場合、
A<tab><tab>C<tab>D<tab>E

A
C
D
E
となってしまいます。

本当は
A
  ←(NULL)
C
D
E

というようにSTRTOK関数を使って分割したいのですが、方法はありますでしょうか?
ご存知のかた教えてください。
よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:STRTOK関数について 19488 επιστημη 2005/01/26 10:52:39


No.19488

Re:STRTOK関数について
投稿者---επιστημη(2005/01/26 10:52:39)


strtokを使ってそのような分割を行うことはできません。



この投稿にコメントする

削除パスワード

No.19489

Re:STRTOK関数について
投稿者---ちゃ(2005/01/26 10:57:40)


>strtokを使ってそのような分割を行うことはできません。

ありがとうございます。
では、どのような間数でしたら可能でしょうか???
やりかたを教えてください。
お願い致します。


この投稿にコメントする

削除パスワード

No.19490

Re:STRTOK関数について
投稿者---REE(2005/01/26 11:25:54)


>では、どのような間数でしたら可能でしょうか???
>やりかたを教えてください。
>お願い致します。

直接的な関数はありません。
strchrなどを使って自力で分割してください。
文字列を理解していれば、そんなに難しくはないはずです。



この投稿にコメントする

削除パスワード

No.19492

Re:STRTOK関数について
投稿者---ちゃ(2005/01/26 12:10:30)


ありがとうございます。
StrChrについて調べてみました。


StrChr(検索先の文字列, 検索する文字 )

もし存在した場合、文字列の位置、
存在しない場合は0を返すということは分かりました。


作ってみたのですが、どうも思い付きません。。。。。

簡単なサンプルソースを書いていただけないでしょうか。
すいません。。。
よろしくお願いします



char str[100]="A<tab><tab>C<tab>D<tab>E";
int str_flg;



/* タブまでの位置を取得 */
str_flg=flg=strchr(str,\t)

if(str_flg == 0)
{
/* タブは存在しない */
}
else
{
?????

}





この投稿にコメントする

削除パスワード

No.19496

Re:STRTOK関数について
投稿者---shu(2005/01/26 12:34:56)


http://www9.plala.or.jp/sgwr-t/lib/strtok.html


この投稿にコメントする

削除パスワード

No.19497

Re:STRTOK関数について
投稿者---ちゃ(2005/01/26 13:05:49)


STRTOK関数でもできればSTRTOKのほうがいいんですが、無理ですよね?


この投稿にコメントする

削除パスワード

No.19498

Re:STRTOK関数について
投稿者---Craft(2005/01/26 13:14:13)


>STRTOK関数でもできればSTRTOKのほうがいいんですが、無理ですよね?

shuさんがかかれたのは、strtokとしてどうするか、ではなくて、
strtokの仕組みがかいてあるので、これを参考にしてstrchrでどう実現するか考えてくださいってことだと思いますが。
リンク先にかかれていた、文字列の状態表からstrchrでどうするかがみえてこないでしょうか?


この投稿にコメントする

削除パスワード

No.19499

Re:STRTOK関数について
投稿者---ちゃ(2005/01/26 13:41:46)


んー。。。
すいません。全く思い付かないです。
strchrとstrtokの2つを使用しないと実現不可ということでしょうか?


この投稿にコメントする

削除パスワード

No.19502

Re:STRTOK関数について
投稿者---shu(2005/01/26 14:02:40)


>strchrとstrtokの2つを使用しないと実現不可ということでしょうか?

いろいろと工夫すれば、解決法はいくらでもあると思います。
関数を使わない方法では、
文字列の先頭から、1文字づつ表示していき、
'\t'が見つかったら、改行するとか。
(ちゃさんのいわれる、分割かどうかはわかりませんが……。)

ちなみに、文字列strは、
"A<tab><tab>C<tab>D<tab>E" ではなくて、
"A\t\tC\tD\tE" のほうが良いのでは?

それから、strtokは、STRTOKではなく、strtokです。
(C言語では、大文字と小文字は、別の文字として扱われます。)


この投稿にコメントする

削除パスワード

No.19521

Re:STRTOK関数について
投稿者---ちゃ(2005/01/26 20:25:01)


すいません。
いろいろ考えたり調べたりしましたが、どうしても思い付きません。
サンプル的なソースを載せていただけないでしょうか。

よろしくお願い致します。


この投稿にコメントする

削除パスワード

No.19525

Re:STRTOK関数について
投稿者---shu(2005/01/26 22:02:40)


>すいません。

なにについて、謝っているのかわかりませんし、
謝っられても、腹立たしいばかりですし、
謝っている気配も、まるっきり伝わってきません。

>いろいろ考えたり調べたりしましたが、どうしても思い付きません。
>サンプル的なソースを載せていただけないでしょうか。

(私の意見としては)駄目です。
とりあえず、まともな返答が得られないような相手に、
サンプルを載せるところで、まともに理解してくれるとは思えません。

ちゃさんは、答えが知りたいのかもしれませんが、
私は、ちゃさんが『理解』することを考えて、返答しています。

最初に載せた、strtok関数についてのページにもサンプルはありましたし、
ここのサイトや過去ログなどにも、いくらでもサンプルになるソースはあります。


この投稿にコメントする

削除パスワード

No.19534

Re:STRTOK関数について
投稿者---nop(2005/01/26 23:03:25)


>いろいろ考えたり調べたりしましたが、どうしても思い付きません。

では、プログラミング言語を離れて考えてみて、
あなた自身が同じ処理を行うとしたら、
どの様にして分割していきますか?
日本語で、細かく説明してみて下さい。

なお、与えられるデータは、
一つの文字が書かれたカードが複数枚で、
各カードに書かれている文字は以下のようなものです。

【各カードの文字】([]で括られたものが一枚と考えてみて下さい。)
[A][\t][B][\t][\t][C][\0]


この投稿にコメントする

削除パスワード

No.19543

Re:STRTOK関数について
投稿者---ちゃ(2005/01/27 08:35:18)


>【各カードの文字】([]で括られたものが一枚と考えてみて下さい。)
>[A][\t][B][\t][\t][C][\0]


以下の条件でカードを引く
[\t]カードが現れたらそのカードは引かない。
2枚続けて[\t]カードだった場合、[NULL]カードを間に入れる
[\0]が現れたらSTOP

まず1枚目
[A]を引く
2枚目[\t]なので無視して次に行く。[B]カードを引く
3枚目[\t]なので無視次を読む。また[\t]なので間に[NULL]カードを挿入
4枚目[C]カードを引く
5枚目[\0]が現れたのでSTOP


こんな感じなんですが・・・。


この投稿にコメントする

削除パスワード

No.19544

Re:STRTOK関数について
投稿者---REE(2005/01/27 09:42:18)


>以下の条件でカードを引く
>(略)
>こんな感じなんですが・・・。

どこで、分割しているのですか?



この投稿にコメントする

削除パスワード

No.19571

Re:STRTOK関数について
投稿者---円零(2005/01/27 15:01:43)


>STRTOK関数でもできればSTRTOKのほうがいいんですが、無理ですよね?

なんでstrtokを使うことにこだわるのかよくわかりませんが…
まあ以下のような変態的プログラムが組めないこともないです。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void){
    char str[]="\t\t\tabc\t\tdef\tghi\t";
    char *token, *dummy, *p;

    if ( (p = dummy = calloc(sizeof str + 2, 1)) == NULL ) exit(1);
    dummy[0] = '*';
    strcpy(dummy + 1, str);
    while( *(p + 1) ){
        token = strtok(p, "\t");
        printf("%s\n", token + 1);
        *p = '\0';
        while(*++p);
        *p = '*';
    }
    return 0;
}

非常に無駄が多いのでこういうものを実際に使ったりしないよーに。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧