如果我要在一个char数组中插入一个指定位置的字符,谁可以告诉我算法哦,非常谢谢

如题所述

这个很繁琐的,建议直接使用现成的sting类,当然如果你要自己学习,下面给出思路。

这涉及到动态维护数组,一般初始化时候先根据你储存的字符串的每次递增大小评估并预定一个缓存大小,为了减少程序在每次新增字符或字符串时调整次数,确保多预留一点。当然步增的大小也不能太大,太多预留空间会占内存,所以适当选择进行平衡。

比如根据需求评估下来,每次增加100个字符比较合适,那么宏定义StepSize 100,即每次增加100个字符,那么先初始化:

char *pBuff=new char[StepSize];

当你的程序在插入新字符或新字符串时,进行判断空间是否够用,快不够时,就需要增大空间,你可以编写一个Resize函数调整缓存空间,和一个插入函数,插入函数在需要时调用Resize函数去扩展空间。

调整缓存空间和插入字符的思路如下:
1、重新计算新的实际所需内存大小以及预留空间,最终计算出总体大小NewSize。
2、备份原内存地址,以便最后释放。
char *tp=pBuff;
3、重新分配内存空间
char *pBuff =new char[NewSize];
4、计算新字符插入点和新字符串长度
5、使用字符串复制函数将插入点之前的所有字符复制到新缓存中
6、在新缓存中,在插入点开始复制新增字符或字符串。
7、将插入点之后,将原缓存中剩余字符串复制到新缓存尾部(起始位置为新增长度+插入点)。
8、重新计算并记录有效字符长度。
9、释放原缓存
delete []tp;tp=null;
完成以上步骤,实现将新字符插入原字符缓存中,并根据实际需要,扩展缓存大小。

最好用类来封装,希望对你有帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-09
void insert(char *pSrc, char *pDst, int pos, char ch)
{
    for(int i = 0; i < pos; i ++)
    {
        *(pDst+i) = *(pSrc+i)
    }
    *(pDst+pos) = ch;
    for(int i = pos; i < strlen(pSrc); i ++)
    {
        *(pDst+pos+1) = *(pSrc+pos);
    }
    return;
}

追问

不是一来就是知道指定位置,而是先要判断指定位置在哪里 在插入,举个例子哦,
如果是这样+1000-v 把第一个0变成B 并且B前面加- 算法又怎么样?

追答

请下次提问把问题描述清楚。

针对你追问内容,是不是可以这样认为:你目的是把源字符串中某个字符的第一次出现替换成你想改变的字符??

即你举的例子:+1000-v 中第一个0替换成-B,即最终字符串为:+1-B00-v对吧?

void insert(char *pSrc, char *pDst, char ch, char *pReplace)
{
    char c;
    bool found = false;
    for(int i = 0, j = 0; i < strlen(pSrc); i ++, j ++)
    {
        c = *(pSrc+i);
        if( c == ch && found == false)
        {
            found = true;
            int len = strlen(pReplace);
            for(int m = 0; m < len; m ++, j++)
                *(pDst+j) = *(pReplace+m)
        }
        else
            *(pDst+j) = *(pSrc+i)
    }
    return;
}

本回答被提问者采纳
相似回答