平成18年 秋期 基本情報技術者 午後 問10
問10 C言語次の C プログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕 関数 pattern_match_string は,対象文字列を先頭から1文字ずつ順に調べ, パターン文字列が表現している条件を満足しているかどうかを判定するプログラムである。 (1) 条件文字列は,対象文字列の各文字(対象文字)に対する条件を表現した1文字以上の文字列 (パターン文字列)を連結したものである。 対象文字とパターン文字列の対応関係は,図のとおりである。
図 対象文字とパターン文字列の対応関係 (2) 関数 pattern_match_string の引数は,次のとおりである。 target:対象文字列 cond:条件文字列 (3) 対象文字は,英数字だけである。 (4) パターン文字列に含まれる文字は,次のとおりである。 @ 英数字 A “ $ ”,“ [ ”,“ ] ”,“ { ”,“ } ”,“ @ ” (5) 対象文字列及び条件文字列に誤りはない。 (6) 表の例では,対象文字列はいずれの条件文字列で表現される条件も満足している。
〔プログラム〕
#include <string.h>
int pattern_match_string(char *, char *);
static char numeral[] = "0123456789"; /* 数字 */
static char lower[] = "abcdefghijklmnopqrstuvwxyz"; /* 英小文字 */
static char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /* 英大文字 */
int pattern_match_string(char *target, char *cond){
int flg = 0, i;
while(*target != '\0' && *cond != '\0' && flg == 0){
if(*cond == '$'){ /* 先頭が'$'の場合 */
cond++;
if(*cond == 'N'){
for(i = 0; numeral[i] != *target
&& numeral[i] != '\0'; i++);
if(numeral[i] != *target) flg = 1;
}else if(*cond == 'L'){
for(i = 0; lower[i] != *target
&& lower[i] != '\0'; i++);
if(lower[i] != *target) flg = 1;
}else if(*cond == 'U'){
for(i = 0; upper[i] != *target
&& upper[i] != '\0'; i++);
if(upper[i] != *target) flg = 1;
}else if(*cond != *target){
flg = 1;
}
}else if(*cond == '['){ /* 先頭が'['の場合 */
flg = 1;
for(cond++; *cond != ']'; cond++)
if(*target == *cond) flg = 0;
}else if(*cond == '{'){ /* 先頭が'{'の場合 */
for(cond++; *cond != '}'; cond++)
if(*target == *cond) flg = 1;
}else if(*cond != '@'){ /* 先頭が'@'でない場合 */
if(*target != *cond) flg = 1;
}
if(flg == 0){
target++;
cond++;
}
}
if(flg != 0){
return strlen(target);
}else if(*target == *cond){
return 0;
}else{
return -1;
}
}
設問1 パターン文字列に関する次の説明中の
(1) 対象文字が任意の英数字であることを表現するパターン文字列は,
(2) 対象文字が数字であることを表現するパターン文字列は,
(3) 対象文字が“ X ”,“ Y ”,“ Z ”のいずれかの文字であることを表現するパターン文字列は,
(4) 対象文字が“ X ”,“ Y ”,“ Z ”のいずれの文字でもないことを表現するパターン文字列は,
a,b に関する解答群 ア “ @ ” イ “ $A ” ウ “ $L ” エ “ $LU ” オ “ $N ” カ “ $U ” キ “ $@ ” c,d に関する解答群 ア “ [XYZ] ” イ “ {XYZ} ” ウ “ $XYZ$ ” エ “ $[XYZ$] ” オ “ ${XYZ$} ”
設問2 関数pattern_match_stringの返却値に関する次の説明中の
(1) 対象文字列のすべての文字が条件文字列で与えた条件を満足している場合,
返却値として (2) 対象文字列の途中の文字に条件文字列で与えた条件を満足しないものがあった場合,
そこで判定を終了し,返却値として (3) 対象文字列と条件文字列のいずれかが途中で終了してしまった場合('\0'が見つかった場合), そこで判定を終了し,返却値として −1を返す。
解答群 ア 0 イ −1 ウ 対象文字列の文字数 エ 検査した対象文字数 オ 検査して条件を満足していた対象文字数 カ 検査していない対象文字数 + 1 キ 検査していない対象文字数
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2025 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||
