掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

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

No.24143

文字列の判断について
投稿者---つくし(2005/11/14 23:59:41)


データcode1とcode2があります。
必ずしも正しく並んでいるとは限りません。
ALL,A
001,A
002,A
003,A
001,B
002,B
003,B
ALL,C
001,D
002,D

データからcode2が同じ値もの同士からcode1で
ALLか数字からなる文字のコードが存在した場合、エラー
とし、ALLのみとか数字から文字のコードのみは、正常と
判断したい。

code2がAは、ALLと数字の文字列が存在するのでエラー
code2が、B、C、Dは、どちらか一方のみなので正常
と結果を得たいのです。

code2の値で切り分けし、
code1の値で、ALLかそれ以外で切りかけし、
文字列がでてきたのをフラグ等で管理し、
と同じ処理を何回も行うコードを書き無駄な処理が多くなります。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列の判断について 24144 RAPT 2005/11/15 00:05:17
<子記事> Re:文字列の判断について 24149 まきじ 2005/11/15 01:38:08
<子記事> Re:文字列の判断について 24151 shu 2005/11/15 12:09:31


No.24144

Re:文字列の判断について
投稿者---RAPT(2005/11/15 00:05:17)


で、開発環境と質問は?


この投稿にコメントする

削除パスワード

No.24149

Re:文字列の判断について
投稿者---まきじ(2005/11/15 01:38:08)


data.txt は正しい形式で記述されている事が前提です。
"ALL" とそれ以外で分けています。
("HOGE" とかでも "001" と同じ扱い)

#include<stdio.h>
#include<string.h>

int main(void){
    
    FILE *fp = fopen("data.txt","r");
    
    if(!fp) return 1;
    
    char c2;
    char code1[32];
    char code2;

    printf("code2=");
    scanf("%c%*c",&c2);

    int ret;
    int all = 0, num = 0;
    
    while((ret = fscanf(fp,"%[^,],%c%*c",code1,&code2)) == 2 && c2 != code2);
    
    while(ret == 2){
        printf("code1:%s code2:%c\n",code1,code2);
        if(!strcmp(code1,"ALL")) all++;
        else num++;
        while((ret = fscanf(fp,"%[^,],%c%*c",code1,&code2)) == 2 && c2 != code2);
    }
    if(all && num) puts("NG");
    else puts("OK");
    
    fclose(fp);
}

compiler gcc (GCC) 3.4.2 (mingw-special)
parameter -std=iso9899:1999 -pedantic -O2 -Wall 



この投稿にコメントする

削除パスワード

No.24151

Re:文字列の判断について
投稿者---shu(2005/11/15 12:09:31)


000: //
001: //  データの読みこみとエラー判定
002: //
003: 
004: //
005: #include <stdio.h>
006: #include <string.h>
007: 
008: //
009: int is_true_data( char *data[], int n );
010: 
011: //
012: //
013: int main( void )
014: {
015:     char *data[] = {
016:         "ALL,A", "001,A", "002,A", "003,A",
017:         "001,B", "002,B", "003,B", "ALL,C",
018:         "001,D", "002,D", NULL
019:     };
020:     int i;
021:     
022:     //  データを表示。
023:     for (i = 0; data[i]; i++)
024:         if (is_true_data( data, i ))
025:             puts( data[i] );
026:     
027:     return 0;
028: }
029: //  正しいデータのチェック
030: int is_true_data( char *data[], int n )
031: {
032:     int i;
033:     
034:     //
035:     for (i = 0; data[i]; i++)
036:     {
037:         //
038:         if (data[n][strlen( data[n] ) - 1] !=
039:             data[i][strlen( data[i] ) - 1])
040:             continue;
041:             
042:         //
043:         if (!strncmp( data[n], "ALL", 3 ) !=
044:             !strncmp( data[i], "ALL", 3 ))
045:             return 0;
046:     }
047:     
048:     return 1;
049: }



この投稿にコメントする

削除パスワード

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