问几个小问题

问几个问题
1. 怎么样防止在栈上分配内存
2. 怎么样将一个字符串处理 如 i am lll 处理成 lll am i 要求空间复杂度是个常量
3. map的缺点是什么

------解决方案--------------------
1、不写局部变量,也不调用函数
2、取出单词,反序写入。
3、麻烦
------解决方案--------------------
1.这个只能是人来防止吧。。。
2.map类似于数据库中的1:1关系,它是一种关联容器,提供一对一(C++ primer中文版中将第一个译为键,每个键只能在map中出现一次,第二个被译为该键对应的值)的数据处理能力,这种特性了使得map类似于数据结构里的红黑二叉树。
------解决方案--------------------
第二个增加时间复杂度的话就不存在空间复杂度的问题了 空间复杂度为字符串长度
------解决方案--------------------
1、动态分配栈空间?不会。想限制的话或许可以考虑在代码里把进程可用的栈空间撑满,想分配也分配不了了
2、strlen(str)貌似不算是常量
3、C中不能直接使用
------解决方案--------------------
2>
C/C++ code


#include <iostream>
#include <algorithm>
using namespace std;

void str_reverse(char* str)
{
    int len = strlen(str);
    char *end = str + len;
    std::reverse(str,end);
    for(char * mid = str; mid < end; str = mid + 1)
    {
        mid = std::find(str,end,' ');
        std::reverse(str,mid);
    }
}
int main()
{
    char arr[] = "III am xxx";
    str_reverse(arr);
    std::cout<<arr;
    system("pause");

    return 0;
}

------解决方案--------------------
1.不写局部变量,不调用函数。
2.不论字符串多长都只用了3个int,1个char
char str[] = "i am lll";
int nIndex = 0;
char cTemp;
for (int i =0; str[i] != '\0'; i++)
{
cTemp = str[i];
for (int j = i; j > 0; j--)
{
str[j] = str[j-1];
}
if (cTemp == ' ')
{
str[0] = cTemp;
nIndex = 0;
}
else
{
str[nIndex] = cTemp;
nIndex ++;
}
}
3.插入删除效率低。
------解决方案--------------------
你不能防止不在站上申请空间吧,首先是你在函数中定义变量,函数本身就是在栈上的。
你说的空间复杂度可以是字符的长度值吗?可以实现的。