gpt4 book ai didi

c - 查找数组中给定字符的每个位置

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:16 25 4
gpt4 key购买 nike

我做了一个小函数,它填充一个分配的内存块,其中包含给定字符串中给定字符的每个位置,并返回指向内存块的指针。

这个函数唯一的问题是无法检查内存块的大小;所以我还制作了一个函数来计算字符串中给定字符的出现次数。

这是一个使用示例:

/*count occurences of char within a given string*/
size_t strchroc(const char *str, const char ch)
{
int c = 0;
while(*str) if(*(str++) == ch) c++;
return c;
}

/*build array of positions of given char occurences within a given string*/
int *chrpos(const char *str, const char ch)
{
int *array, *tmp, c = 0, i = 0;

if(!(array = malloc(strlen(str) * sizeof(int)))) return 0x00;
while(str[c])
{
if(str[c] == ch) array[i++] = c;
c++;
}
if(!(tmp = realloc(array, i * sizeof(int)))) return 0x00;
array = tmp;
return array;
}

int main(void)
{
char *str = "foobar foobar"; //'o' occurs at str[1], str[2], str[8], and str[9]
int *array, b = 0, d;

if(!(array = chrpos(str, 'o'))) exit(1); //array[0] = 1, array[1] = 2, array[2] = 8, array[3] = 9

/*
* This is okay since I know that 'o'
* only occures 4 times in str. There
* may however be cases where I do not
* know how many times a given char
* occurs so I figure that out before
* utilizing the contents of array.
* I do this with my function strchroc.
* Below is a sample of how I would
* utilize the data contained within
* array. This simply prints out str
* and on a new line prints the given
* char's location within the str
* array
*/

puts(str);
while(b < (int) strchroc(str, 'o')) //loop once for each 'o'
{
for(d = 0; d < (b == 0 ? array[b] : array[b] - array[b - 1] - 1); d++) putc((int) ' ', stdout);
printf("%d", array[b]);
b++;
}
}

输出:

foobar foobar
12 89

我唯一担心的是,如果这两个功能之一失败,就无法正确使用数据。我正在考虑将字符串中 char 的出现次数作为 chrpos 的参数,但即使那样我仍然必须调用这两个函数。

我想知道是否有人对执行此操作的方法有任何建议,以便我只需要一个函数来构建数组。

我能想到的唯一方法是将 char 出现的次数存储到 array[0] 中,并让 array[1] 到 array[char_occurences] 保持char 的位置。

如果有人有更好的主意,我将不胜感激。

最佳答案

正如我在评论中所述,无论如何,第一件事就是保存数据,以防您无法缩小分配的内存:

if (!(tmp = realloc(array, i * sizeof(int))))
return array;
return (tmp); //array = tmp; is useless

如果您想更多地保护您的 strchroc 函数,请在开头添加一个 if (!str) return 0;

关于c - 查找数组中给定字符的每个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12898743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com