/**************************************************************************
Name: 题一,算法实现
Copyright: hqw
Author: huangqingwei23@126.com
Date: 24/05/13 20:30
Description: refer to below
问题描述:
将一串很长的英文单词组成的段落进行翻转,要求每个单词内部的的字符不变;
如baidu google microsoft.,处理以后变为microsoft. google baidu
额外说明:此串太长,以致没有足够内存来存放其拷贝。
算法描述及复杂度分析:
一、因数据量过大(设长度为N)只能直接对此段内存进行操作。具体描述如下:
step1: 先对整个段落每个字符进行翻转
step2: 然后再对段落中每个单词单独进行翻转
二、算法的正确性及可行性(仅不考虑内存溢出),由上述步骤易知;
三、复杂度,按以上steps,易知,为O(N)
****************************************************************************/
#include <iostream>
#include <cassert>
#include <cstring>
void _swap(char &a, char &b){
char tmp = a;
a = b;
b = tmp;
}
void reverseEveryChar(char *beg, char *end){
assert(beg && end);
while(beg <= end){
_swap(*beg++, *end--);
}
}
int main(int argc, char** argv){
char src[] = "I wish to Join in baidu.";
int len = strlen(src);
//firstly reverse every char of src
reverseEveryChar(src, src+(len-1) );
//then reverse every char of the word in src
char *p = src;
while(*p != '\0'){
char *word_beg, *word_end;
word_beg = word_end = p;
while(*word_end != ' ' && *word_end != '\0'){
++word_end;
}
if(' ' == *word_end)
p = word_end+1;
else
p = word_end;
--word_end;
reverseEveryChar(word_beg, word_end);
}
std::cout<<src<<std::endl;
return 0;
}
C++段落次序逆转
最新推荐文章于 2024-09-20 15:09:03 发布
该博客介绍了一个C++算法,用于在不额外占用内存的情况下,将一个长英文段落中的单词顺序翻转,同时保持单词内部字符顺序不变。算法分为两步:首先翻转所有字符,然后逐个翻转单词。复杂度为O(N)。
摘要由CSDN通过智能技术生成