gpt4 book ai didi

c - 如何返回 C 中的列表?

转载 作者:行者123 更新时间:2023-12-02 18:48:23 26 4
gpt4 key购买 nike

我尝试用 * 分割字符串,并返回分割后的字符串,如下所示。

abc*d*efg*hijk -> [abc,d,efg,hijk]

这是我的代码,其中 *pattern 是给定的字符串,我首先计算星号(cnt)的数量,并创建一个长度为 cnt 的空列表。但它不断出现错误,而我不明白......任何人都可以帮助我吗?

错误信息

  1. 不使用计算值 (*star_cnt++;)
  2. 函数返回局部变量的地址(返回单位;)第二个是我的主要错误。我无法返回列表
int Slice(char *pattern) {

int *star_cnt;
int cnt;

*star_cnt = *pattern;
cnt = 0;

while (*star_cnt != '\0') {
if (*star_cnt == '*') {
cnt++;
}
*star_cnt++;
}

int units[cnt];
int *unit;
int unit_cnt;
unit_cnt = 0;
*unit = *pattern;

while (*unit != '\0') {
int *new_unit;
while (*unit != '*'){
*new_unit = *unit;
unit++;
new_unit++;
}
unit++;
units[unit_cnt] = *new_unit;
}
return units;

最佳答案

我觉得有很多问题,查看一个工作示例实际上可能会有所帮助。

你可以尝试这样的事情:

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>

/**
* @fn Slice()
* @param [IN] pattern - pointer to string to be analysed
* @param
* @return pointer to array for strings, array is terminated by NULL
* */
char** Slice(char *pattern) {

char *star_cnt;
int cnt;
char** resultlist;

star_cnt = pattern;
cnt = 0;

while (*star_cnt != '\0') {
if (*star_cnt == '*') {
cnt++;
}
star_cnt++;
}

printf("%d items\n",cnt+1);

resultlist = malloc(sizeof(char*) * (cnt+2));
memset(resultlist,0,sizeof(char*) * (cnt+2));
star_cnt = pattern;

cnt = 0;
resultlist[cnt] = star_cnt;
//printf("item %d: %s\n",cnt,resultlist[cnt]);
cnt++;
while (*star_cnt != '\0') {
if (*star_cnt == '*') {
*star_cnt = '\0';
resultlist[cnt] = star_cnt+1;
//printf("item %d: %s\n",cnt,resultlist[cnt]);
cnt++;
}
star_cnt++;
}
return resultlist;
}

int main()
{
char working_string[] = "abc*d*efg*hijk";
char* backup_string = strdup(working_string);
char** list = NULL;

list = Slice(working_string);
int i;

i = 0;
if (list != NULL)
{
while(list[i] != NULL)
{
printf("%d : %s\n",i,list[i]);
i++;
}
free(list);
}

printf("original_string = %s\n",backup_string);
free(backup_string);
}

它产生如下输出:

4 items
0 : abc
1 : d
2 : efg
3 : hijk
original_string = abc*d*efg*hijk

Slice 函数基本上返回一个指向 char* 字符串的指针,并且数组列表以最后一个元素中的 NULL 终止。请记住,在此解决方案中,原始字符串已被修改,因此无法再次使用。

关于c - 如何返回 C 中的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67119324/

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