本文主要是介绍删除字串中指定的字符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天看到同学在做题,要求是:把一个字符串中的所有空格去掉,合并所有字符。例如
输入:abc 123 abc<enter>
输出:abc123abc
很简单吧!!
总结了一下,想到三种简单的处理方法:
第一种:时间复杂度为n^2,空间复杂度为n
void delete_3(char* str)
{int i=0,j=0;while (str[i]){if (str[i] == ' '){j = i;while (str[j]){str[j] = str[j+1];j++;}}i++;}
}
第二种:时间复杂度为n,空间复杂度为2n
void delete_2(char *str)
{char s[100];int i = 0,j = 0;while(str[i]){if (str[i] != ' ')s[j++] = str[i];i++;}s[j] = '\0';i = 0;while(s[i]){str[i] = s[i];i++;}str[i] = '\0';}
第三种:时间和空间复杂度都是n
void delete_1(char *str)
{char *p = str;int i = 0;while(*p){if (*p != ' ')str[i++] = *p;p++;}str[i] = '\0';
}
当然,最好用就是第三种,简单而且高效!当时一看到这题,我脑子里只有第一种方法。。。。。。。可能因为我单片机玩多了,总是觉得资源是很有限的,所以利用空间换时间的处理方法很少被我想到。。。。。。但第二种方法的确要快于第一种。而第三种方法我却没有想到。。。。。感觉自己好low,真得多看看,多想想才行!!!
第三种方法看起来很简单,但却是很精妙!!这为处理字符串内字符的移位,删除等提供了一个很好的想法。
比如说,删除数组中的指定元素,而这个元素可以有多个,也可能是连续的。
小东西,却很实用!
这篇关于删除字串中指定的字符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!