使用C语言,编写一个函数,将字符串string中的单词位置倒置,如:“I am a student”,倒置后是 “student a am I”。单词内部结构不变。
解题思路:先将整个字符串倒置,再将每个单词倒置回来。
void turn_over_str(char *str, int begin, int end)
{
while (begin < end)
{
char tmp = str[begin];
str[begin] = str[end];
str[end] = tmp;
//printf("begin=[%d], end=[%d]\n", begin, end);
begin++;
end--;
}
return;
}
void turn_over_fun(char *szBuf)
{
int nLen = strlen(szBuf);
//将所有字符串倒置
turn_over_str(szBuf, 0, nLen - 1);
//printf("szBuf=[%s]\n", szBuf);
//将每个单词再倒置
int nBeginPos = 0;
int nEndPos = 0;
while (szBuf[nEndPos] != '\0')
{
if (szBuf[nEndPos] != ' ')
{
++nEndPos;
}
else
{
turn_over_str(szBuf, nBeginPos, nEndPos - 1);
++nEndPos;
nBeginPos = nEndPos;
}
}
return;
}
int main()
{
//I am a student --> student a am I
char szBuf[32];
memset(szBuf, 0, sizeof(szBuf));
strcpy(szBuf, "I am a student");
turn_over_fun(szBuf);
printf("[%s]\n", szBuf);
return 0;
}