←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


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

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

 詳しくはこちら



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

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


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

No.3513

日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---あおきひろし(2005/03/01 14:36:36)
http://haoki.hp.iinfoseek.co.jp


‘力させて(例>s.16.6.15)
∧源'.'で分割して
m→明治 t→大正 s→昭和 h→平成 に置き換えて
の>昭和16年6月15日
と表示させるプログラムを作りたく挑戦しておりますが
strtokが甘く使いこなせないのでしょうかうまく行きません。
出来たら更にいろいろのデーターベースに発展して行きたいのです。
是非よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・ 3514 Blue 2005/03/01 14:44:41


No.3514

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---Blue(2005/03/01 14:44:41)


できているところまでのソースを載せてくれませんか?
そのほうが、strtokのどのような使い方がわからないかはっきりします。

# 丸付き数字は環境依存文字なので使わないようにしましょう。(たとえば、(1)とかにする。olタグでもいいけど)



この投稿にコメントする

削除パスワード

No.3515

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---あおきひろし(2005/03/01 17:52:52)
http://haoki.hp.iinfoseek.co.jp


レスありがとう御座います。ソース下記に示します。
最初に私の書いた目的を再度見て頂き、是非よろしくお願い致します。
#----------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h> //exit()用

#define LOG_ELEMENTS 4
enum{ WA,NEN,TUKI,HI };

int main(void)
{
char log[] = "昭和 16年 6月 15日 ";
char gengoo1[20];
char gengoo2[20];
char gengoo3[20];
char gengoo4[20];
char* logelement[LOG_ELEMENTS];
int id;
printf("例:s.16.6.15\n");
printf("注:区切りは半角ペリオドを入れる。\n");
gets(log);
logelement[WA] = strtok(log,"."); /* 1回目の分割 */
// printf("%s ",logelement[WA]);
for(id=1; id<LOG_ELEMENTS; id++)
{
/* 2回目以降は分割対象文字列にNULLを指定 */
logelement[id] = strtok(NULL,".");
if (*logelement[id] == '.')
{logelement[id]++;
}
// printf("%s ",logelement[id]);
}
// printf("\n");
strcpy(gengoo1,logelement[0]);
strcpy(gengoo2,logelement[1]);
strcpy(gengoo3,logelement[2]);
strcpy(gengoo4,logelement[3]);
// printf("%s%s%s%s\n",gengoo1,gengoo2,gengoo3,gengoo4);

if (gengoo1=="s\0")
{
printf("sss%s%s%s%s\n",gengoo1,gengoo2,gengoo3,gengoo4);
printf("gengoo2= %s\n",gengoo2);
printf("gengoo3= %s\n",gengoo3);
printf("gengoo4= %s\n",gengoo4);
printf("%s/%s/%s/%s\n",logelement[WA],logelement[NEN],logelement[TUKI],logelement[HI]);
}
return 0;
}



この投稿にコメントする

削除パスワード

No.3516

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---nop(2005/03/01 17:57:25)


strtok()の前に、文字列について勉強する事をお勧めします。


この投稿にコメントする

削除パスワード

No.3517

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---あおきひろし(2005/03/01 18:24:55)
http://haoki.hp.iinfoseek.co.jp


そうですか。やり直してみます。ありがとうございました。


この投稿にコメントする

削除パスワード

No.3520

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---ねこやろう(2005/03/01 21:13:14)


テストしていない。
nopさんの言うことももっともなんで、勉強してくり。

#include <stdio.h>
#include <string.h>
#include <stdlib.h> //exit()用

#define LOG_ELEMENTS 4
char seps[]   = ".";
enum{WA, NEN, TUKI, HI};

int main(void)
{
    char log[20] = "";
    char output[20] = "";
    char* token;
    char logelement[LOG_ELEMENTS][3] = {"", "", "", ""};
    int i;

    printf("例:s.16.6.15\n");
    printf("注:区切りは半角ピリオドを入れる。\n");
    printf("    また、数値は2桁まで\n");
    gets(log);

    i = 0;
    token = strtok(log, seps);
    while (token != NULL ) {
        if ((2 < strlen(token)) || i > 3) {
            printf("入力値が不正です\n");
            exit(1);
        }
        strcpy(logelement[i], token);
        i++;
        token = strtok(NULL, seps);
    }

    if (!strcmp(logelement[WA], "m")) {
        sprintf(output, "明治 %s年 %s月 %s日", logelement[NEN], logelement[TUKI], logelement[HI]);
    } else if (!strcmp(logelement[WA], "t")) {
        sprintf(output, "大正 %s年 %s月 %s日", logelement[NEN], logelement[TUKI], logelement[HI]);
    } else if (!strcmp(logelement[WA], "s")) {
        sprintf(output, "昭和 %s年 %s月 %s日", logelement[NEN], logelement[TUKI], logelement[HI]);
    } else if (!strcmp(logelement[WA], "h")) {
        sprintf(output, "平成 %s年 %s月 %s日", logelement[NEN], logelement[TUKI], logelement[HI]);
    } else {
        printf("入力値が不正です\n");
        exit(1);
    }

    printf("%s\n", output);
    exit(0);
}



この投稿にコメントする

削除パスワード

No.3522

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---あおきひろし(2005/03/01 23:00:07)
http://haoki.hp.iinfoseek.co.jp


ありがとうございました。目からウロコです。
コンパイル後、実行確認いたしました。
Cのことですから、年号はちゃんと読み分けて貰えるのだろうと期待してやって行きます。また何かぶっつかるかもしれませんのでその節はSOS発信させて頂きたくよろしくお願いします。有難うございました。


この投稿にコメントする

削除パスワード

No.3523

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---かずま(2005/03/02 01:19:32)


> Cのことですから、年号はちゃんと読み分けて貰えるのだろうと期待してやって行きます。

どういう意味でしょうか?

さて、strtok を使わずに書いてみると、こうなりました。
#include <stdio.h>
#include <string.h>

int main(void)
{
    char buf[256], e, c, *p, *g = "mtsh";   int y, m, d;

    puts("例:s.16.6.15\n"
         "注:区切りは半角ピリオドを入れる。\n"
         "    また、数値は2桁まで");
    if (fgets(buf, sizeof buf, stdin)
      && sscanf(buf, "%c.%2d.%2d.%2d %c", &e, &y, &m, &d, &c) == 4
      && (p = strchr(g, e)))
        printf("%.4s%d年%d月%d日\n", "明治大正昭和平成"+(p-g)*4, y, m, d);
    else
        puts("ERROR");
    return 0;
}



この投稿にコメントする

削除パスワード

No.3525

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---あおきひろし(2005/03/02 08:31:06)
http://haoki.hp.iinfoseek.co.jp


年号はちゃんと読み分けて貰えるのだろうと期待してやって行きます。
<この意味です。>
例えば1868は、慶応4年 という具合にです。
   2005は、平成17年という具合にです。
お祖母ちゃんに何年生まれかと聞くと 大正 XX 年・・・といわれ何時も戸惑うのです。

私、遅まきながら必ずCのプロになります。定年になりまして時間は十分あるので今度こそは!!

>さて、strtok を使わずに書いてみると、こうなりました。
><pre>
兎に角ありがとうございました。ありがとうございました。
></pre>


この投稿にコメントする

削除パスワード

No.3527

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---HALLS(2005/03/02 20:59:32)


>年号はちゃんと読み分けて貰えるのだろうと期待してやって行きます。
><この意味です。>
>例えば1868は、慶応4年 という具合にです。
>    2005は、平成17年という具合にです。

こういったところは、アプリケーションが対応しなければなりません。
Cの言語仕様には、こういったところを読み分ける術がありません。


この投稿にコメントする

削除パスワード

No.3526

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---ねこやろう(2005/03/02 11:39:46)


>printf("%.4s%d年%d月%d日\n", "明治大正昭和平成"+(p-g)*4, y, m, d);

すげー。こんなの思いつきもしぃひんかった。
もしかして、けっこう良く使われる手?


この投稿にコメントする

削除パスワード

No.3528

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---RAPT(2005/03/03 01:18:47)


>>printf("%.4s%d年%d月%d日\n", "明治大正昭和平成"+(p-g)*4, y, m, d);
>
>すげー。こんなの思いつきもしぃひんかった。
>もしかして、けっこう良く使われる手?
日付処理で、曜日を出力する時など、よく使われる手法ですね。
曜日(youbi)が0〜6で表現される時、
printf("%.2s", "日月火水木金土"[youbi * 2]);
とか。

ここで、%.2s を %2s にすると、変なことになりますが。



この投稿にコメントする

削除パスワード

No.3529

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---かずま(2005/03/03 02:11:50)


>   printf("%.2s", "日月火水木金土"[youbi * 2]);

次のようにしないとダメです。

    printf("%.2s", "日月火水木金土" + youbi*2);



この投稿にコメントする

削除パスワード

No.3534

Re:日付の変換(C言語で)についてうまく行きませんで悩んでいます・・・
投稿者---RAPT(2005/03/04 01:11:44)


> > printf("%.2s", "日月火水木金土"[youbi * 2]);
> 次のようにしないとダメです。
> printf("%.2s", "日月火水木金土" + youbi*2);
そうですね。フォローありがとうございます。



この投稿にコメントする

削除パスワード

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




掲示板提供:Real Integrity