// 如何翻转单词
void reverse_str(char *pBegin, char *pEnd){
if(pBegin == NULL || pEnd == NULL)
return;
while(pBegin < pEnd){
char temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
pBegin ++,
pEnd --;
}
}
char* ReverseSentence(char *pData){
if(pData == NULL){ return NULL;}
// 两个指针指向同一个地方
char *pBegin = pData;
char *pEnd = pData;
while(*pEnd != ‘\0‘){
// 计算pEnd的长度
pEnd ++; // 指针指向最后一位
// 注意字符"" ,包含 \0
}
pEnd--; // 指针指向前最后一个可见字符
// 先翻转整个句子
reverse_str(pBegin, pEnd);
// 翻转每个单词,重新将end和begin指向字符串的开头
pBegin = pEnd = pData;
while(*pBegin != ‘\0‘){
// 同时跳过空格
if(*pBegin == ‘ ‘){
// 下移动一位
pBegin ++;
pEnd ++;
continue;
// 有单个字符串的要反转
}else if(*pEnd == ‘ ‘ || *pEnd == ‘\0‘){
// 一定要倒退一位
reverse_str(pBegin, --pEnd);
pBegin = ++pEnd;
// 在重新设置一次
// 要先移到下一位
}else{
// 以上的条件大多数不满足,则pEnd的指针指向后面
pEnd ++;
}
}
return pData;
}
int main(int argc, const char * argv[]) {
// 数字名
char pBegin[] = "i am a student."; // 字符串时多一个数组
printf("%lu \n", sizeof(pBegin)/sizeof(char));
char *reserve = ReverseSentence(pBegin);
for (int i=0; reserve[i] != ‘\0‘; i++) {
printf("%c", reserve[i]);
}
printf("\n");
return 0;
}
void reverse_word(char *pStart, char *pEnd){
if (pStart == NULL || pEnd == NULL) {
return ;
}
// while (*pStart != ‘\0‘) {
while(pStart < pEnd){
char temp = *pStart;
*pStart = *pEnd;
*pEnd = temp;
pStart++;
pEnd--;
}
}