当前位置:网站首页>单词反转实现「建议收藏」
单词反转实现「建议收藏」
2022-07-07 20:58:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
如题,代码例如以下:
void reverse_words(std::string& original)
{
enum {
scan_normal,
scan_frag,
} state;
char buf[4];
memset(buf, 0, sizeof(buf));
int last = original.size() - 1;
int cur = original.size() - 1;
int n = original.size();
char* p = &original.front(); // scan ptr
char* movep = p; // move ptr
state = scan_normal;
int wfrag_len = 0;
int wlen = 0;
int movel = n;
int scan_ok;
while (n > 0) {
scan_ok = 1;
int end_frag = 0;
wfrag_len = 0;
// scan word until ' ' or word size >= word_buf
while (p[cur] != ' ') {
--cur;
if ( (wfrag_len = (last - cur)) >= sizeof(buf) ) {
scan_ok = 0;
if (scan_normal == state) {
state = scan_frag;
}
break;
}
}
if (state == scan_normal)
wlen = wfrag_len;
else
wlen += wfrag_len;
movel = n - wfrag_len;
if (movel <= 0 || n <= wlen)
break;
if (scan_ok) {
if (state == scan_frag) {
state = scan_normal;
end_frag = 1;
}
}
if (wfrag_len > 0) {
memcpy(buf, p + cur + 1, wfrag_len);
memmove(p + wfrag_len + scan_ok - end_frag, p, movel - (scan_ok - end_frag));
if (end_frag)
memmove(p + wlen, p + wlen - 1, n - wlen);
memcpy(p, buf, wfrag_len);
}
else { // skip empty
memmove(p + wlen + 1, p + wlen, movel - wlen - 1);
}
if (scan_normal == state) {
p[wlen] = ' ';
p += (wlen + 1);
n -= (wlen + 1);
cur = last = (n - 1);
}
else { // scan_frag
cur = last;
}
if (scan_ok || end_frag)
wlen = 0;
memset(buf, 0x0, sizeof(buf));
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116297.html原文链接:https://javaforall.cn
边栏推荐
- 寫一下跳錶
- 数值法求解最优控制问题(〇)——定义
- C language helps you understand pointers from multiple perspectives (1. Character pointers 2. Array pointers and pointer arrays, array parameter passing and pointer parameter passing 3. Function point
- Phoenix JDBC
- Le capital - investissement est - il légal en Chine? C'est sûr?
- [function recursion] do you know all five classic examples of simple recursion?
- Apifox interface integrated management new artifact
- Codesonar Webinar
- Codeforces 474 F. Ant colony
- 【C语言】指针进阶---指针你真的学懂了吗?
猜你喜欢
Tensorflow2. How to run under x 1 Code of X
Don't fall behind! Simple and easy-to-use low code development to quickly build an intelligent management information system
解决使用uni-app MediaError MediaError ErrorCode -5
Onespin | solve the problems of hardware Trojan horse and security trust in IC Design
Intelligent software analysis platform embold
I Basic concepts
恶魔奶爸 B3 少量泛读,完成两万词汇量+
How to meet the dual needs of security and confidentiality of medical devices?
Helix QAC 2020.2新版静态测试工具,最大限度扩展了标准合规性的覆盖范围
目标:不排斥 yaml 语法。争取快速上手
随机推荐
反诈困境,国有大行如何破局?
The latest version of codesonar has improved functional security and supports Misra, c++ parsing and visualization
Phoenix JDBC
201215-03-19—cocos2dx内存管理–具体解释「建议收藏」
Phoenix JDBC
恶魔奶爸 A0 英文零基础的自我提升路
Is private equity legal in China? Is it safe?
ERROR: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
Implement secondary index with Gaussian redis
I Basic concepts
Cantata9.0 | new features
想杀死某个端口进程,但在服务列表中却找不到,可以之间通过命令行找到这个进程并杀死该进程,减少重启电脑和找到问题根源。
Codeforces round 296 (Div. 2) A. playing with paper[easy to understand]
I wrote a markdown command line gadget, hoping to improve the efficiency of sending documents by garden friends!
ISO 26262 - 基于需求测试以外的考虑因素
[award publicity] issue 22 publicity of the award list in June 2022: Community star selection | Newcomer Award | blog synchronization | recommendation Award
恶魔奶爸 A1 语音听力初挑战
MySQL storage expression error
How to choose fund products? What fund is suitable to buy in July 2022?
Codeforces Round #296 (Div. 2) A. Playing with Paper[通俗易懂]