春期の基本情報技術者試験の問題について
基本情報試験の勉強の為に過去門を解いていたのですが
自分には分からない記述があったので質問しました
下記のプログラムの
while(bp > base && *--bp != '/');
とは一体どのような処理をしているのか教えてください
C言語は独学で勉強したのですがこのようなwhile文の
使用方法はどこにものっていなかったので・・・
よろしくお願いします。
問題は平成21年春期の基本情報技術者試験の
午後の問9です。
#include <string.h>
void convert(const char*, const char*, char*);
void convert(const char *path, const char *base, char *result){
const char *pp, *bp;
char *rp;
int length;
/* pathが絶対パス表記の場合 */
if(*path == '/'){
;
return;
}
/* pathがカレントディレクトリの場合 */
if(!strcmp(path, ".") || !strcmp(path, "./")){
;
return;
}
length = strlen(base);
bp = base + length; /* bpは文字列baseの終端を指す。*/
if(*(bp - 1) == '/')
--bp;
/* pathの先頭部にある".."又は"../"を解析することで,
baseのパス表記のうち,どこまでresultと共通になるかを調べる。*/
for(pp = path; *pp != '\0' && *pp == '.';){
if(!strncmp(pp, "../", 3)){
pp += 3;
while(bp > base && *--bp != '/');
}else if(!strncmp(pp, "./", 2)){
pp += 2;
}else if(!strncmp(pp, "..\0", 3)){
pp += 2;
while(bp > base && *--bp != '/');
}else{
break;
}
}
/* baseのパス表記と共通な部分をresultに複写する。*/
length = ;
strncpy(result, base, length);
rp = ;
*rp++ = '/';
/* pathの文字列のうち,先頭部分の"./"や".."を除いた残りの
部分(ppが指す文字列)を,resultの文字列に追加する。 */
strcpy(rp, pp);
return;
}
お礼
回答ありがとうございます。 もう少し丁寧に教えて頂けたらありがたいです。