字符串的按单词逆序(带标点)

博客内容介绍了如何实现字符串按单词逆序,包括处理常见标点符号。程序通过编写单词逆序和整体句子逆序的函数来实现,但仅能识别有限的标点符号。

主要思想:先写出单词逆序的函数,再写整个句子逆序的函数(在其中查找单词,找到后调用单词逆序的函数逆序,最后将整个句子逆序)。

程序缺点:只能识别几个常用的标点符号

源代码及测试程序:

//给定一个字符串,按单词将该字符串逆序,含标点   
#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;  
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值