#思路:
时间复杂度为o(n),从字符串的后面往前找空格然后替换,需要两个指示器指向字符串原始末尾和新增空格后的末尾。
#include<stdio.h>
void RepalvceBlank(char string[],int length)
{
if(string==NULL && length<=0)
return;
int oldoflength=0;
int numberofblank=0;
int i=0;
while(string[i]!='\0')
{
++oldoflength; //计算原始字符串的长度
if(string[i]==' ')
++numberofblank; //计算空格的个数
++i;
}
/*newlength为把空格替换为'%20'后的长度*/
int newlength=oldoflength+numberofblank*2;
if(newlength>length)
return;
int indexofold=oldoflength;
int indexofnew=newlength;
while(indexofold >=0 && indexofnew>indexofold)
{
if(string[indexofold]==' ')
{
string[indexofnew--]='0';
string[indexofnew--]='2';
string[indexofnew--]='%';
}
else
string[indexofnew--]=string[indexofold];
--indexofold;
}
}
void main()
{
char str[20]="we are happy!";
RepalvceBlank(str,20);
puts(str);
}
- 栈的简单应用(数字的逆转)
#include<iostream>
#include <stack>
using namespace std;
void Reverse_List(int a[])
{
std::stack<int> array; //定义一个整形的栈
int i=0;
while(i!=5)
{
array.push(i); //数组下标入栈
i++;
}
while(!array.empty())
{
int j=array.top(); //获取当前栈中的位置
printf("%d\n",a[j]);
array.pop(); //数组下标出栈
}
}
void main()
{
int a[6]={2,3,4,5,6};
Reverse_List(a);
}