| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1324 人关注过本帖
标题:[讨论]删除字符串中的某一字符 v2.8
只看楼主 加入收藏
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
结帖率:100%
收藏
 问题点数:0 回复次数:11 
[讨论]删除字符串中的某一字符 v2.8
/* 请大家提意见,如果有更好方法请分享下! [我在这感谢大家!] */

void strdelchr(char * ar, char ch) /* v2.8 */
{
int i = 0, j = 0;
do
{
while(ar[j] == ch)
j++;
ar[i] = ar[j++];
}while(ar[i++]);
}



/* 请大家提意见,如果有更好的方法请分享下! [我在这感谢大家!] */

[此贴子已经被作者于2007-11-20 21:23:14编辑过]

搜索更多相关主题的帖子: 字符 删除 
2007-11-20 19:10
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
#top
唉,没人回帖

[此贴子已经被作者于2007-11-20 20:13:06编辑过]


—>〉Sun〈<—
2007-11-20 19:56
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
void strdelchr(char * ar, char ch)
{
int i=0,j=0;
while(ar[i]!='\0')
{
if(ar[i]==ch)
{
j++;
}
else
{
i++;
}
ar[i]=ar[i+j];
}
}

倚天照海花无数,流水高山心自知。
2007-11-20 21:14
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
写了下,随便测试了一下,如果有问题,请指正啦.

倚天照海花无数,流水高山心自知。
2007-11-20 21:15
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
以下是引用nuciewth在2007-11-20 21:14:22的发言:
void strdelchr(char * ar, char ch)
{
int i=0,j=0;
while(ar[i]!='\0')
{
if(ar[i]==ch)
{
j++;
}
else
{
i++;
}
ar[i]=ar[i+j];
}
}




[此贴子已经被作者于2007-11-20 22:00:17编辑过]


—>〉Sun〈<—
2007-11-20 21:27
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

就是一个记录当前遍历到的该字符个数.
然后就按照这个数做移动的位数.
没有写注释,嘿嘿.


倚天照海花无数,流水高山心自知。
2007-11-20 21:35
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

/* 做了一个测试程序 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10000000

void strdelchr1(char * ar, char ch) /* v2.8 */
{
int i = 0, j = 0;
do
{
while(ar[j] == ch)

j++;
ar[i] = ar[j++];
}while(ar[i++]);
}

void strdelchr2(char * ar, char ch) /* 3 楼 */
{
int i=0,j=0;
while(ar[i]!='\0')
{
if(ar[i] == ch)
j++;
else
i++;
ar[i] = ar[i+j];
}
}

int main(void)
{
int i = 0;
clock_t start, end;
char * ar1 = (char *)malloc(sizeof(char) * MAX);
char * ar2 = (char *)malloc(sizeof(char) * MAX);
srand((unsigned int)time(NULL));
ar1[MAX - 1] = ar2[MAX - 1] = '\0';

while(1)
{
for(i = 0; i < (MAX - 1); i++)
ar1[i] = ar2[i] = ('0' + (rand() % 10));

puts("Start.");

start = clock();
strdelchr1(ar1, '1');
end = clock();
printf("%lf\n", (double)(end - start) / CLOCKS_PER_SEC);

start = clock();
strdelchr2(ar2, '1');
end = clock();
printf("%lf\n", (double)(end - start) / CLOCKS_PER_SEC);

puts("Enter next.");
getchar();
}
return 0;
}


[此贴子已经被作者于2007-11-20 23:15:27编辑过]


—>〉Sun〈<—
2007-11-20 22:31
ondy
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-9-4
收藏
得分:0 
do
{
while(ar[j] == ch)
j++;
ar[i] = ar[j++];
}while(ar[i++]);

你没有分析过,时间复杂度么??

O(n^2);

2007-11-20 22:44
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
以下是引用ondy在2007-11-20 22:44:38的发言:
do
{
while(ar[j] == ch)
j++;
ar[i] = ar[j++];
}while(ar[i++]);

你没有分析过,时间复杂度么??

O(n^2);

怎么分析。


—>〉Sun〈<—
2007-11-20 22:47
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用ondy在2007-11-20 22:44:38的发言:
do
{
while(ar[j] == ch)
j++;
ar[i] = ar[j++];
}while(ar[i++]);

你没有分析过,时间复杂度么??

O(n^2);

个人认为他的复杂度还是O(n)的


倚天照海花无数,流水高山心自知。
2007-11-20 22:48
快速回复:[讨论]删除字符串中的某一字符 v2.8
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030634 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved