zoukankan      html  css  js  c++  java
  • 段落以单词为单位按行反序

    //
    // 以单词为单位进行反序,按行进行,标点符合不反序. 例如: 
    // "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;
    }
    
  • 相关阅读:
    docker部署spring boot并接入skywalking【探索篇】
    转载:如何处理一个CVE漏洞?
    转载:JavaScript利器分享之Proj4js
    转载:geoserver 2.18.0 跨域配置
    转载:如何实现OSM地图本地发布并自定义配图
    wsl2搭建ElasticSearch集群
    测试方法
    测试用例
    软件测试分类
    前端html
  • 原文地址:https://www.cnblogs.com/wxxweb/p/2089000.html
Copyright © 2011-2022 走看看