- 论坛徽章:
- 0
|
回复 #2 mymtom 的帖子
是啊,我写错了。
我自己写了个函数,贼恶心,放上来吧。
尽情鄙视我吧,如果有好的算法还请多多指教。
void formatPath(char *inPath,char *outPath)
{
char inPathCopy[1024] = {0};
char *cur;
int isFirstSplash = 1;
if (NULL == inPathCopy || NULL == outPath)
return;
strncpy(inPathCopy, inPath, 1024 - 1);
cur = inPathCopy;
/* treat '////' */
while (*cur)
{
if (*cur == '/' && isFirstSplash)
{
cur ++;
isFirstSplash = 0;
}
else if (*cur == '/' && !isFirstSplash)
{
*cur = -1;
cur ++;
}
else
{
cur ++;
isFirstSplash = 1;
}
}
/* treat './' */
cur = inPathCopy;
while (*cur)
{
if (*cur == '.' && *(cur + 1) == '/' && *(cur-1) != '.')
{
*cur = -1;
*(cur + 1) = -1;
cur += 2;
}
else
cur ++;
}
/* treat '../' */
cur = inPathCopy;
while (*cur)
{
if (*cur == '.' && *(cur + 1) == '.' && *(cur + 2) == '/')
{
char *temp = cur - 1;
*cur = -1;
*(cur + 1) = -1;
*(cur + 2) = -1;
while (*temp != '/')
{
temp --;
}
*temp = -1;
temp --;
while (*temp != '/')
{
*temp = -1;
temp --;
}
cur +=3;
}
else
cur ++;
}
/* copy the formated path to <outPath> */
cur = inPathCopy;
while (*cur)
{
if (*cur != -1)
{
*outPath = *cur;
outPath ++;
}
cur ++;
}
return;
} |
|