当前位置: 代码迷 >> C语言 >> [讨论]删除字符串中的某一字符 v2.8
  详细解决方案

[讨论]删除字符串中的某一字符 v2.8

热度:133   发布时间:2007-11-20 19:10:14.0
[讨论]删除字符串中的某一字符 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编辑过]

搜索更多相关的解决方案: 字符  删除  

----------------解决方案--------------------------------------------------------
#top
唉,没人回帖

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


----------------解决方案--------------------------------------------------------
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];
}
}
----------------解决方案--------------------------------------------------------
写了下,随便测试了一下,如果有问题,请指正啦.
----------------解决方案--------------------------------------------------------
以下是引用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编辑过]


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------

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

#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编辑过]


----------------解决方案--------------------------------------------------------
do
{
while(ar[j] == ch)
j++;
ar[i] = ar[j++];
}while(ar[i++]);

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

O(n^2);
----------------解决方案--------------------------------------------------------
以下是引用ondy在2007-11-20 22:44:38的发言:
do
{
while(ar[j] == ch)
j++;
ar[i] = ar[j++];
}while(ar[i++]);

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

O(n^2);

怎么分析。
----------------解决方案--------------------------------------------------------

以下是引用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)的


----------------解决方案--------------------------------------------------------
  相关解决方案