我们可以使用指针和循环来手动实现这个任务。以下是一个基本的代码示例,它将字符串分割成单词并将它们存储在一个动态分配的数组中。
#include
#include
int main() {
char* str = "This is a sample string.";
int len = strlen(str);
char** words = malloc(sizeof(char*) * len);
int num_words = 0;
for (int i = 0; i < len; i++) {
if (str[i] == ' ') {
str[i] = '\0';
if (i > 0 && str[i-1] != ' ') {
words[num_words] = &str[i];
num_words++;
}
} else if (i == 0 || str[i-1] == '\0') {
words[num_words] = &str[i];
num_words++;
}
}
// Print out the words
for (int i = 0; i < num_words; i++) {
printf("%s\n", words[i]);
}
// Free the memory
free(words);
return 0;
}
在上面的示例中,我们使用了两个循环来分割字符串,其中第一个循环用于将字符串分割成单词,并将单词的指针存储在一个动态分配的数组中。第二个循环用于打印出数组中的单词以及释放分配的内存。
值得注意的是,在分割字符串时,我们将空格替换为\0
,以便将其用作单词的结尾标记。我们还需要检查空格前面的字符是否不是空格或字符串的开头,以避免将多个空格视为单词。
使用以上代码,我们可以成功将一个字符串分割成单词,并存储在一个动态分配的数组中,而不需要任何预制函数。