要求:不得开辟额外的空间,而且用递归实现!
C++版:
#include <stdio.h>
#include <string>
using namespace std;
void moveSpace(string::iterator& head, string::iterator& newhead, string& str)
{
if ( head == str.end())
{
if (newhead != head)
*newhead = '\0'; // 新的结尾标志, Just For C API, anybody make sure it's used in std::string?
return;
}
if ( *head == ' ')
moveSpace(++head,newhead,str);
else
{
*newhead = * head;
moveSpace(++head,++newhead,str);
}
}
int main()
{
//test case1
string testStr = " ";
string::iterator h1 = testStr.begin();
string::iterator h2 = testStr.begin();
moveSpace(h1,h2,testStr);
printf("%s\n",testStr.c_str());
//test case2
testStr = " I am man ! ";
h1 = testStr.begin();
h2 = testStr.begin();
moveSpace(h1,h2,testStr);
printf("%s\n",testStr.c_str());
//test case3
testStr = " I a m m a n ! ";
h1 = testStr.begin();
h2 = testStr.begin();
moveSpace(h1,h2,testStr);
printf("%s\n",testStr.c_str());
}
#include <string>
using namespace std;
void moveSpace(string::iterator& head, string::iterator& newhead, string& str)
{
if ( head == str.end())
{
if (newhead != head)
*newhead = '\0'; // 新的结尾标志, Just For C API, anybody make sure it's used in std::string?
return;
}
if ( *head == ' ')
moveSpace(++head,newhead,str);
else
{
*newhead = * head;
moveSpace(++head,++newhead,str);
}
}
int main()
{
//test case1
string testStr = " ";
string::iterator h1 = testStr.begin();
string::iterator h2 = testStr.begin();
moveSpace(h1,h2,testStr);
printf("%s\n",testStr.c_str());
//test case2
testStr = " I am man ! ";
h1 = testStr.begin();
h2 = testStr.begin();
moveSpace(h1,h2,testStr);
printf("%s\n",testStr.c_str());
//test case3
testStr = " I a m m a n ! ";
h1 = testStr.begin();
h2 = testStr.begin();
moveSpace(h1,h2,testStr);
printf("%s\n",testStr.c_str());
}

浙公网安备 33010602011771号