gpt4 book ai didi

c - 尝试与strtok类似的拆分和存储数组

转载 作者:行者123 更新时间:2023-11-30 16:46:43 25 4
gpt4 key购买 nike

对于类作业,我们被要求编写一个程序,该程序接受一个字符串和一个分隔符,然后接受“单词”并将它们存储在一个新的字符串数组中。即,输入(“我的名字是”,“”)将返回一个包含元素“我的”“名字”"is"的数组。

粗略地说,我尝试的是:

  1. 使用名为 number_of_delimeters() 的单独助手来确定字符串数组的大小

  2. 迭代初始数组以查找给定字符串中要放入数组中的元素数量

  3. 在数组中为每个字符串分配存储空间

  4. 将元素存储在分配的内存中

包含指令:

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

这是单独的助手:

int number_of_delimiters (char* s, int d)
{
int numdelim = 0;
for (int i = 0; s[i] != '\0'; i++)
{
if (s[i] == d)
{
numdelim++;
}
}
return numdelim;
}

`这是函数本身:

char** split_at (char* s, char d)
{
int numdelim = number_of_delimiters(s, d);
int a = 0;
int b = 0;

char** final = (char**)malloc((numdelim+1) * sizeof(char*));

for (int i = 0; i <= numdelim; i++)
{
int sizeofj = 0;
while (s[a] != d)
{
sizeofj++;
a++;
}

final[i] = (char*)malloc(sizeofj);
a++;
int j = 0;

while (j < sizeofj)
{
final[i][j] = s[b];
j++;
b++;
}

b++;
final[i][j+1] = '\0';
}
return final;
}

打印:

void print_string_array(char* a[], unsigned int alen)
{
printf("{");
for (int i = 0; i < alen; i++)
{
if (i == alen - 1)
{
printf("%s", a[i]);
}
else
{
printf("%s ", a[i]);
}
}
printf("}");
}

int main(int argc, char *argv[])
{
print_string_array(split_at("Hi, my name is none.", ' '), 5);
return 0;
}

当前返回 {Hi, my name is none.}

经过一些研究,我意识到这个函数的目的与 strtok 相似或相同。然而,事实证明,查看源代码并没有多大帮助,因为它包含了我们尚未在类里面使用的概念。

我知道这个问题很模糊,代码也很难读懂,但是你能指出这种解决问题的方法会立即出现什么问题吗?

最佳答案

该程序有几个问题。

  1. while (s[a] != d) 是错误的,字符串中最后一个单词后面没有分隔符。
  2. final[i][j+1] = '\0'; 错误,j+1 多了一个位置。
  3. 返回的数组不可用,除非您事先知道其中有多少元素。

关于c - 尝试与strtok类似的拆分和存储数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628224/

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