对于类作业,我们被要求编写一个程序,该程序接受一个字符串和一个分隔符,然后接受“单词”并将它们存储在一个新的字符串数组中。即,输入(“我的名字是”,“”)将返回一个包含元素“我的”“名字”"is"的数组。
粗略地说,我尝试的是:
使用名为
number_of_delimeters()
的单独助手来确定字符串数组的大小迭代初始数组以查找给定字符串中要放入数组中的元素数量
在数组中为每个字符串分配存储空间
将元素存储在分配的内存中
包含指令:
#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 相似或相同。然而,事实证明,查看源代码并没有多大帮助,因为它包含了我们尚未在类里面使用的概念。
我知道这个问题很模糊,代码也很难读懂,但是你能指出这种解决问题的方法会立即出现什么问题吗?
最佳答案
该程序有几个问题。
while (s[a] != d)
是错误的,字符串中最后一个单词后面没有分隔符。final[i][j+1] = '\0';
错误,j+1
多了一个位置。- 返回的数组不可用,除非您事先知道其中有多少元素。
关于c - 尝试与strtok类似的拆分和存储数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628224/