海黎祈祷中

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  27 随笔 :: 0 文章 :: 5 评论 :: 48215 阅读
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

问题: 一个已知的字符数组,把里面多余的空格去掉,得到一个新的字符数组,如{a, , ,b,c, , , ,d}变成{a, b,c, ,d}

要求: 不能使用临时数组,时间复杂度为O(n)

 

 

复制代码
#include <iostream>
#include 
<string>
using namespace std;

void fun2(char* cArr)
{
int iSpaceCounter = 0;
int iSpaceMarker = -1;
int iNotSpaceMarker = -1;
int iNotSpace = -1;
bool bMeetNotSpace = false;
for(int i = 0; i<strlen(cArr); ++i)
{
if(cArr[i] == ' ')
{
++iSpaceCounter;
if(iSpaceCounter == 2 && bMeetNotSpace)
{
iSpaceMarker = i;
}
else if(i == 0)
{
iSpaceMarker = 0;
}
}
else
{
if(iSpaceCounter > 1 || !bMeetNotSpace)
{
char temp = cArr[i];
cArr[i] = cArr[iSpaceMarker];
cArr[iSpaceMarker] = temp;   
iNotSpace = iSpaceMarker;
iSpaceCounter -= 2;
if(iSpaceCounter < 0)
{
iSpaceCounter = 0;
}
iSpaceMarker += 2;
}
else
{
iNotSpace = i;
}
bMeetNotSpace = true;
}
}
cArr[iNotSpace+1] = '\0';
}
int main(int argc, char *args[])
{
 char* cTar = NULL;
 char* cTemp = " a      b  c";
 char* cArr = new char[];
 strcpy(cArr,cTemp);
 fun2(cArr);
}
复制代码

 

 

posted on   海黎  阅读(3934)  评论(1编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示