C检查数组中是否存在空间,是否不重新分配更多空间?

我必须编写一个程序,该程序采用字符串参数(例如“ abcd”)并返回新的字符串(例如“ a-bb-ccc-dddd”)。因此,对于字符串中的每个字符,请在新字符串中增加其重复次数。

在C#或Java之类的程序中,我只会使用StringBuilder,但在C中,我不确定如何检查字符串是否有足够的空间容纳新字符。如果没有,请重新分配。

       char *str = malloc(strlen(source) * sizeof(char));
       for (int i = 0; i <= strlen(source) - 1; i++)
               (for int j = 0; j < i + 1; j++)
                 if (space_exists_in_string(source))
                     str[j] = source[i]; 
                 else {
                    str = realloc(str,strlen(str) * 2);
                    str[j] = source[i]
                 }

所以基本上,我正在寻找一种方法来检查是否(space_exists_in_string)。

谢谢

xichen9 回答:C检查数组中是否存在空间,是否不重新分配更多空间?

如果将数组声明为字符数组,例如char arr[],则可以调用sizeof(arr)并获得数组的大小。但是,如果使用malloc或calloc为它分配了一些堆内存,则无法获取数组的大小,只能调用strlen(),后者仅给出字符串的大小,而不是内存位置。因此,要么将字符串声明为字符数组,要么存储创建的内存大小(动态创建时),并在每次扩展/缩小内存时进行更新。

在您的情况下,我认为如果为输出分配一些存储空间并遍历输入并将数据插入到输出中,那将很简单。这样,您知道要分配给输出多少数据,而无需扩展它。输出所需的空间为(1 + 2 + 3 + 4 + 5 +... strlen(input) times) + (strlen(input)-1)

本文链接:https://www.f2er.com/3169252.html

大家都在问