字符串的按單詞逆序(帶標點)

主要思想:先寫出單詞逆序的函數,再寫整個句子逆序的函數(在其中查找單詞,找到後調用單詞逆序的函數逆序,最後將整個句子逆序)。

程序缺點:只能識別幾個常用的標點符號

源代碼及測試程序:

//給定一個字符串,按單詞將該字符串逆序,含標點   
#include<stdio.h>   
 
//start 和 end 之間逆序的函數
void reverse_word(char *start, char *end) 
{  
    while(start < end) 
	{  
        *start = *start ^ *end;  
        *end = *start ^ *end;  
        *start = *start++ ^ *end--;  
    }  
}  

char *reverse_sentence(char *str) 
{  
    char *start = str;  
    char *end = str;  
    while(*end != '\0') 
	{  
        if(*end==' ' || *end=='!' || *end==',' || *end=='.' || *end=='?')//查到一個單詞 
		{  
			if(start < end)//只有一個字母的單詞不逆序
				reverse_word(start, end-1);  

			while(*end==' ' || *end=='!' || *end==',' || *end=='.' || *end=='?')
				end++; //指向下一個單詞首字符   

            start = end;  
        }  
        else  
            end++;  
    }  
    reverse_word(str, end-1);//整個句子逆序   
  
    return str;  
}  
  
int main(int argc, char *argv[]) 
{  
    char str[] = "Hello, I am glad to see you!";

    printf("%s\n", str);  
    printf("%s\n", reverse_sentence(str));  
  
    return 0;  
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章