我正在尝试用 C 语言实现 python 的“split()”函数,并使用以下代码:
#include <stdio.h>
#include <string.h>
int strsplit(char *, unsigned long *);
void strprint(char *);
void empty_arr(char *);
int main()
{
char str1[] = "help me out"; // changeable line ~~~~~~~~~~~~~~
unsigned long str2[strlen(str1)];
int k = strsplit(&str1, &str2);
unsigned long *p;
p = &str2;
for (int i = 0; i < k; i++)
{
printf("%u\n", str2[i]);
}
return 0;
}
void strprint(char *s)
{
while (*s != '\0')
{
printf("%c\n", *s);
s++;
}
}
void empty_arr(char *a)
{
while (*a != '\0')
{
*a = '\0';
a++;
}
}
int strsplit(char *s, unsigned long *n)
{
int i = 0;
char temp[50];
char *t = temp;
while (1 == 1)
{
// printf("*s = %c\n", *s);
// printf("Length: %u\n\n", strlen(temp));
if (*s == ' ' || *s == '\0')
{
// printf("Entering!\n");
*n = strlen(temp);
n++;
i++;
empty_arr(temp);
t = &temp;
if (*s == '\0')
break;
}
else
{
*t = *s;
t++;
}
s++;
}
return i;
}
输出为: 4 2 3 3
但是,当我将 str1 (用“可更改行”注释)更改为“帮帮我” 那么我收到的输出是这样的: 6 2 3 3
对于第一个输入,函数 strsplit 正确地将单词“help”的长度确定为 4,但对于第二个输入,它确定其长度为 6。
我用过高级语言编程,但从未使用过 C 等低级语言。 任何帮助将不胜感激。
注意到一些问题:
int k = strsplit(&str1, &str2);
应该是 int k = strsplit(str1, str2);
。t = &temp;
应该是t = temp;
p = &str2;
应该是 p = str2;
- 但 p
未使用,所以只需将其删除即可。unsigned long
不应使用 %u
,而应使用 %lu
。进行这些更改后,您的程序将打印:
4
2
3
3