删除一个字符串中的多余空格问题
2008-09-19 18:46:51
//形如:ab c d e的一个字符串,其中b和c之间有2个空格,c和d之间有一个空格,d和e之间有4个空格
//现在要删除b和c之间多余的一个空格,删除d和e之间多余的3个空格.
//变成形如:ab c d e的输出结果.
//具体算法如下:
char * IgnoreExtraTable(char * str)
{
char *temp;
temp = (char *)malloc(strlen(str) * sizeof(str));
if(!temp) return ERROR;
memset(temp, '\0', strlen(str));
*temp = *str++;
while(*str != '\0')
{
if(*str != *temp)
{
*++temp = *str++;
}
else
{
str++;
}
}
return temp;
}
//程序点评:其实这个程序可以看成是一个队列的问题,取一个元素和队列的对尾元素进行比较,如果两者不等,就将这个元素插到队列中,如果两者相等,就抛弃该元素,进行下面一个元素的插入.最后队列中的所有元素就是要求得串.
删除一个字符串中的重复字符
2008-09-19 19:14:43
//形如:abadabccdfacdb的一个字符串,现在要将里面重复的字符给删除
//得到一个形如:abdcf的一个字符串
具体算法如下:
char * DeleteDoubleElem(char * str)
{
int i;
char *temp;
temp = (char *)malloc(strlen(str) * sizeof(str));
if(!temp) return ERROR;
memset(temp, '\0', strlen(str));
for(i = 0; i < strlen(str) - 1; i ++)
{
if(str[i] != '0')
{
for(j = i + 1; j < strlen(str); j ++)
{
if(str[j] != '0')
{
if(str[j] == str[i])
{
str[j] = '0';
}
}
}
}
}
while(*str != '\0')
{
if(*str != '0')
{
*temp++ = *str++;
}
else
{
str++;
}
}
return temp;
}
//程序点评:这段程序的执行效率是很高的!它的基本思想是做标志位,如果在后面的扫描中发现了和前面的基准元素相等就将该位置为0,最后只需要将串中不是0的字符输出就可以了.但是,有个情况是如果基准元素是0就不用再以0位基准元素向后面扫描了,而是查找一个不为0的基准元素,再向后扫描.本程序这一点也考虑在内了.
2008-09-19 18:46:51
//形如:ab c d e的一个字符串,其中b和c之间有2个空格,c和d之间有一个空格,d和e之间有4个空格
//现在要删除b和c之间多余的一个空格,删除d和e之间多余的3个空格.
//变成形如:ab c d e的输出结果.
//具体算法如下:
char * IgnoreExtraTable(char * str)
{
char *temp;
temp = (char *)malloc(strlen(str) * sizeof(str));
if(!temp) return ERROR;
memset(temp, '\0', strlen(str));
*temp = *str++;
while(*str != '\0')
{
if(*str != *temp)
{
*++temp = *str++;
}
else
{
str++;
}
}
return temp;
}
//程序点评:其实这个程序可以看成是一个队列的问题,取一个元素和队列的对尾元素进行比较,如果两者不等,就将这个元素插到队列中,如果两者相等,就抛弃该元素,进行下面一个元素的插入.最后队列中的所有元素就是要求得串.
删除一个字符串中的重复字符
2008-09-19 19:14:43
//形如:abadabccdfacdb的一个字符串,现在要将里面重复的字符给删除
//得到一个形如:abdcf的一个字符串
具体算法如下:
char * DeleteDoubleElem(char * str)
{
int i;
char *temp;
temp = (char *)malloc(strlen(str) * sizeof(str));
if(!temp) return ERROR;
memset(temp, '\0', strlen(str));
for(i = 0; i < strlen(str) - 1; i ++)
{
if(str[i] != '0')
{
for(j = i + 1; j < strlen(str); j ++)
{
if(str[j] != '0')
{
if(str[j] == str[i])
{
str[j] = '0';
}
}
}
}
}
while(*str != '\0')
{
if(*str != '0')
{
*temp++ = *str++;
}
else
{
str++;
}
}
return temp;
}
//程序点评:这段程序的执行效率是很高的!它的基本思想是做标志位,如果在后面的扫描中发现了和前面的基准元素相等就将该位置为0,最后只需要将串中不是0的字符输出就可以了.但是,有个情况是如果基准元素是0就不用再以0位基准元素向后面扫描了,而是查找一个不为0的基准元素,再向后扫描.本程序这一点也考虑在内了.
老北京的毛猴儿
C语言——判断一个字符串

2009/06/14 10:28 | by 
