• 段落以单词为单位按行反序


    //
    // 以单词为单位进行反序,按行进行,标点符合不反序. 例如: 
    // "ABC DEF GH.\nabc def gh."反序为"GH. DEF ABC\ngh. def abc" 
    //
    // 方法:先将句子中字母倒置,然后将每个单词字母倒置,如下. 
    //       .HG FED CBA\n.hg fed cba
    //       GH. DEF ABC\ngh. def abc 
    //
    
    #include <cstdlib>
    #include <cassert>
    #include <iostream>
    
    //
    // 将单词字母倒置. 
    //
    void reverse_word(char *word, size_t length)
    {
    	assert(NULL != word);
    	
    	char ch;
    	
    	for (size_t i = 0; i < length / 2; ++i) 
    	{
    		ch = word[i];
    		word[i] = word[length - 1 - i];
    		word[length - 1 - i] = ch;
    	}
    } 
    
    
    //
    // 将句子所有字母倒置. 
    //
    void reverse_sentence(char *sentence, size_t length)
    {
    	size_t begin = 0;
    	
    	reverse_word(sentence, length);
    	for (size_t offset = 0; offset < length; ++offset)
    	{
    		if (' ' == sentence[offset]) {
    			reverse_word(sentence + begin, offset - begin);
    			begin = offset + 1;
    		}
    	}
    	reverse_word(sentence + begin, length - begin);
    }
    
    
    //
    // 将段落中所有单词的字母倒置. 
    //
    void reverse_section(char *section)
    {
    	assert(NULL != section);
    	
    	// 将各个句子单词倒置. 
    	for (size_t begin = 0, offset = 0; '\0' != section[offset]; ++offset)
    	{
    		if ('\n' == section[offset] || '\0' == section[offset]) 
    		{
    			reverse_sentence(section + begin, offset - begin);
    			begin = offset + 1;
    		}
    	} 
    }
    
    int main(void)
    {
    	char section[] = "ABC DEF GH.\nabc def gh.";
    	
    	reverse_section(section);
    	std::cout << section << std::endl;
    	
    	return EXIT_SUCCESS;
    }
    
  • 相关阅读:
    Centos7 ftp服务器搭建
    搭建单机版spark
    JAVA JDBC大数据量导入Mysql
    springboot使用自带连接池连接postgre
    linux centos6安装postgresql
    SpringBoot中配置不序列化返回值为null的属性
    sublime 3 安装格式化JSON插件
    HIve分组查询返回每组的一条记录
    FastJson乱序问题
    深入理解迪杰斯特拉算法
  • 原文地址:https://www.cnblogs.com/wxxweb/p/2089000.html
Copyright © 2020-2023  润新知