例如:
有一個字符數組的內容爲:“student a am i”,
請你將數組的內容改爲"i am a student".
(要求:不能使用庫函數。 )
分析:
這裏需要兩次逆轉,先將字符串整體逆轉,再將以空格分割的子串逆轉
代碼部分:
先用my_strlen函數計算字符串大小:
int my_strlen(char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
逆轉從 start 到 end 之間的字符串:
void reverse_str(char* start,char * end)
{
while(start < end)
{
//保存頭的內容
char temp = *start;
//把頭的內容置換爲尾的內容
*start = *end;
//把尾的內容置換爲頭的內容
*end = temp;
//頭向後移動,尾向後移動
start++;
end--;
}
}
子串逆轉:
void reverse(char* str)
{
char* start = str;
char* end = str + my_strlen(str) - 1;
//字符串的起始指針
char* cur_start = str;
//整體逆轉一遍
reverse_str(start,end);
//局部子串逆轉
while(*cur_start)
{
//局部起點
char* start = cur_start;
//尋找子串的尾點
while((*cur_start != ' ') && (*cur_start != '\0'))
{
cur_start++;
}
//逆轉子串
reverse_str(start,cur_start - 1);
if(*cur_start == ' ')
{
cur_start++;
}
}
}
int main()
{
char str[100];
gets(str);
reverse(str);
printf("%s\n",str);
system("pause");
return 0;
}