整理下心情,在一家公司呆的够久,基础知识遗忘的太久,今天去面试遇到标题中的题目,竟然有点手忙脚乱,真的是不应该啊。看来基础知识,还是要常常的翻新翻新。多的不说开始解析。
首先提供解题思路:先将整个句子完全翻转,然后以空格为分割符,逐个单词翻转。
第一步输出结果: uoy evol i
第二步输出结果: you evol i
....
最终结果: you love i
代码:
void Reveris(char *start, char *end)
{
if (start != nullptr && end != nullptr)
{
while (start < end)
{
char ch = *start;
*start = *end;
*end = ch;
start++;
end--;
}
}
}
void SwitchWords(char* word)
{
if (word != nullptr)
{
char *start = word;
char *end = word;
while (*end != '\0')
{
end++;
}
Reveris(start, --end);
printf("%s", word);
start = end = word;
//根据空格来翻转单词
while (*end != '\0')
{
if (*start == ' ')
{
start++;
end++;
}
else if (*end == ' ' || *end == '\0')
{
Reveris(start, --end);
start = ++end;
}
else
{
end++;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char *word = new char[20];
char *tmp = "i love book";
memcpy(word, tmp, 12);
SwitchWords(word);
printf("%s", word);
delete []word;
word = nullptr;
return 0;
}
抛出一个问题:
int _tmain(int argc, _TCHAR* argv[])
{
char *word = "i love book";
SwitchWords(word);
printf("%s", word);
return 0;
}
这个测试函数有问题吗?有什么问题?请大牛给出解释!后续我也会在后面加上自己的解释。