【发布时间】:2013-08-14 05:08:36
【问题描述】:
我需要编写一个函数来从字符串中删除所有重复的子字符串,下面的函数做得比工作但不太正确。
输入:这是第2课的简单测试退出第2课
输出:这个针对第 2 课退出的简单测试
如您所见,函数 remove "is" 从句子中但不正确。
void RemoveDuplicates(char text[], size_t text_size, char** output)
{
char *element;
/* Allocate size for output. */
*output = (char*) malloc(text_size);
*output[0] = '\0';
/* Split string into tokens */
element = strtok(text, " ");
if (element != NULL)
strcpy(*output, element);
while( (element = strtok(NULL, " ")) != NULL ) {
/* Is the element already in the result string? */
if (strstr(*output, element) == NULL) {
strcat(*output, " " );
strcat(*output, element );
}
}
}
更新的代码版本 (@Rohan)
输入:这是一个简单的测试,对于第 2 课退出很简单
输出:这是一个简单的测试,对于第 2 课退出很简单
void RemoveDuplicates(char text[], size_t text_size, char** output)
{
char *temp = NULL;
char *element;
/* Allocate size for output. */
*output = (char*) malloc(text_size);
*output[0] = '\0';
/* Split string into tokens */
element = strtok(text, " ");
if (element != NULL)
strcpy(*output, element);
while( (element = strtok(NULL, " ")) != NULL ) {
/* Is the element already in the result string? */
temp = strstr(*output, element);
/* check for space before/after it or '\0' after it. */
if (temp == NULL || temp[-1] == ' ' || temp[strlen(element)] == ' ' || temp[strlen(element)] == '\0' ) {
strcat(*output, " " );
strcat(*output, element );
}
}
}
【问题讨论】: