字符串中的單詞逆序排列
題目:
給定一個(gè)字符串, 該字符串由英文單詞構(gòu)成, 該函數(shù)的作用是把這個(gè)字符串中的單詞逆序排列, 比如輸入字符串為"This is a dog", 那么運(yùn)行該函數(shù)后該字符串應(yīng)轉(zhuǎn)化為"dog a is This"
算法: 逆序所有字符串,然后再逆序所有單詞, 兩者順序無所謂!
給定一個(gè)字符串, 該字符串由英文單詞構(gòu)成, 該函數(shù)的作用是把這個(gè)字符串中的單詞逆序排列, 比如輸入字符串為"This is a dog", 那么運(yùn)行該函數(shù)后該字符串應(yīng)轉(zhuǎn)化為"dog a is This"
算法: 逆序所有字符串,然后再逆序所有單詞, 兩者順序無所謂!
char* Reverse(char* start, char* end)
{
if (start == NULL || *start == '\0' || end == NULL || *end == '\0')
return NULL;
char* p = start; // 首地址
char ch;
while(start < end)
{
ch = *start;
*start++ = *end;
*end-- = ch;
}
return p;
}
char* ReverseEveryWord(char* p)
{
if (p == NULL || *p == '\0')
return NULL;
char* left= p;
char* right = p;
while(*right)
{
if (*right == ' ' || *right == '\0')
{
Reverse(left,right-1);
left = right+1;
}
right++;
}
// Revere last word
Reverse(left, right-1);
return p;
}
char* ReverseWholeString(char* p)
{
if (p == NULL || *p == '\0')
return NULL;
char* start = p;
while(*p++)
;
p -= 2; // 最后一個(gè)字符的地址
return Reverse(start, p);
}
{
if (start == NULL || *start == '\0' || end == NULL || *end == '\0')
return NULL;
char* p = start; // 首地址
char ch;
while(start < end)
{
ch = *start;
*start++ = *end;
*end-- = ch;
}
return p;
}
char* ReverseEveryWord(char* p)
{
if (p == NULL || *p == '\0')
return NULL;
char* left= p;
char* right = p;
while(*right)
{
if (*right == ' ' || *right == '\0')
{
Reverse(left,right-1);
left = right+1;
}
right++;
}
// Revere last word
Reverse(left, right-1);
return p;
}
char* ReverseWholeString(char* p)
{
if (p == NULL || *p == '\0')
return NULL;
char* start = p;
while(*p++)
;
p -= 2; // 最后一個(gè)字符的地址
return Reverse(start, p);
}
int _tmain(int argc, _TCHAR* argv[])
{
char str[] = "This is a dog";
ReverseWholeString(str);
ReverseEveryWord(str);
return 0;
}
{
char str[] = "This is a dog";
ReverseWholeString(str);
ReverseEveryWord(str);
return 0;
}
posted on 2011-06-02 00:18 Mike Song 閱讀(934) 評(píng)論(0) 編輯 收藏 引用 所屬分類: C/C++面試題目