思路 :先將整個(gè)數(shù)組逆序,再將數(shù)組中的每個(gè)單詞逆序,就可以達(dá)到字符串以單詞為單位進(jìn)行逆序。
舉例:
1、輸入:I like China
2、將整個(gè)數(shù)組逆序:anihC ekil I
3‘’將字符串中的每個(gè)單詞逆序: China like I
代碼如下:
#include#include//char* left 字符串第一個(gè)字符的地址
//char* right 字符串最后一個(gè)字符的地址
void reverse(char* left, char* right)
{char ch = 0;//用來暫存一個(gè)字符
while (left< right)
{ch = *left;
*left = *right;
*right = ch;
left++;
right--;
}
}
int main()
{char arr[100] = {0 };//聲明并初始化一個(gè)數(shù)組
//提示
printf("請輸入字符串:>\n");
//輸入字符串
gets_s(arr);//之所以不用scanf是因?yàn)閟canf不能讀取空格,而gets_s可以讀取空格
int len = strlen(arr);//求字符串長度
//將整個(gè)字符串逆序
reverse(arr, arr + len - 1);
//對字符串每個(gè)單詞進(jìn)行逆序
char* start = arr;//聲明一個(gè)字符指針變量start,初始化賦地址為arr,用來指向單詞第一個(gè)字母
while (*start)//因?yàn)椤甛0’的ASCLL值為0,且0為假,所以指針*start指向的內(nèi)容為‘\0’,循環(huán)結(jié)束。
{char* end = start;//聲明一個(gè)字符指針變量end,初始化賦地址為start,后面用來表示單詞最后一個(gè)字母后面的一塊地址: 空格 或‘\0’
while (*end != ' ' && *end != '\0')//指針*end指向的內(nèi)容為 空格 或 ‘\0’則結(jié)束循環(huán)
{end++;//地址end加一,使指針指向的內(nèi)容不斷接近 空格 或 ‘\0’
}
reverse(start,end-1);//此時(shí)地址end里的內(nèi)容為 空格 或 ‘\0’,所以 ch-1 為 空格 或 ‘\0’前面的一塊地址,也就是單詞最后一個(gè)字母的地址
if (*end == ' ')//指針*end指向的內(nèi)容為 空格 說明后面還有單詞
{start = end + 1;//此時(shí)end為 空格 的地址,加1就等于下一個(gè)單詞的第一個(gè)字母
}
else//否則*end==‘\0’說明后面沒有單詞,將end賦給start。則指針*start指向的的內(nèi)容為‘\0’,循環(huán)結(jié)束
{start = end;
}
}
//輸出字符串
printf("%s\n",arr);
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧