精华内容
下载资源
问答
  • 删除字符串中所有指定的字符,将结果保存到一个新的字符串中并输出*/ #include<stdio.h> #include<string.h> main() { char str[100],s[100],c; int i=0,j=0; printf("请输入一个字符串:"); ...

    在这里插入图片描述

    /*编程从键盘输入一个字符串和一个指定字符,
    删除该字符串中所有指定的字符,将结果保存到一个新的字符串中并输出*/
    #include<stdio.h>
    #include<string.h>
     main()
    {	char str[100],s[100],c;
    	int i=0,j=0;
    	printf("请输入一个字符串:"); 
    	gets(str);
    	printf("请输入指定的字符:"); 
    	c=getchar();
    	while(str[i]!='\0')
    	{	if(str[i]!=c)/*判断是否为指定的字符*/
    		{	s[j]=str[i];
    			j++; 
    		}
    			i++;
    	}
    	s[j]='\0';
    	puts(s);	 
    }
    
    展开全文
  • 从字符串中删除指定字符

    万次阅读 2011-04-11 23:14:00
    题目:输入两个字符串第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 分析:这是一道微软面试题。在微软的常见...

    http://bidlcy514.blog.163.com/blog/static/105491943201062693329886/

     

    前一段时间去HULU笔试的时候,就出了这样一个题,以为很简单,直接用的如果遇到就直接删除,而且后面的所有元素顺序前移,这样效率太低,而且没有创新性,问题分为两步,一个是查找到字符,另一个是删除字符,这两种都有简便方法,看似平常的题,确实微软的面试题哟

    题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。

     

    分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编程基本功。

     

    要编程完成这道题要求的功能可能并不难。毕竟,这道题的基本思路就是在第一个字符串中拿到一 个字符,在第二个字符串中查找一下,看它是不是在第二个字符串中。如果在的话,就从第一个字符串中删除。但如何能够把效率优化到让人满意的程度,却也不是 一件容易的事情。也就是说,如何在第一个字符串中删除一个字符,以及如何在第二字符串中查找一个字符,都是需要一些小技巧的。

     

    首先我们考虑如何在字符串中删除一个字符。由于字符串的内存分配方式是连续分配的。我们从字 符串当中删除一个字符,需要把后面所有的字符往前移动一个字节的位置。但如果每次删除都需要移动字符串后面的字符的话,对于一个长度为n的字符串而言,删 除一个字符的时间复杂度为O(n)。而对于本题而言,有可能要删除的字符的个数是n,因此该方法就删除而言的时间复杂度为O(n2)。

     

    事实上,我们并不需要在每次删除一个字符的时候都去移动后面所有的字符。我们可以设想,当一 个字符需要被删除的时候,我们把它所占的位置让它后面的字符来填补,也就相当于这个字符被删除了。在具体实现中,我们可以定义两个指针(pFast和 pSlow),初始的时候都指向第一字符的起始位置。当pFast指向的字符是需要删除的字符,则pFast直接跳过,指向下一个字符。如果pFast指 向的字符是不需要删除的字符,那么把pFast指向的字符赋值给pSlow指向的字符,并且pFast和pStart同时向后移动指向下一个字符。这样, 前面被pFast跳过的字符相当于被删除了。用这种方法,整个删除在O(n)时间内就可以完成。

     

    接下来我们考虑如何在一个字符串中查找一个字符。当然,最简单的办法就是从头到尾扫描整个字符串。显然,这种方法需要一个循环,对于一个长度为n的字符串,时间复杂度是O(n)。

     

    由于字符的总数是有限的。对于八位的char型字符而言,总共只有28=256个字符。我们 可以新建一个大小为256的数组,把所有元素都初始化为0。然后对于字符串中每一个字符,把它的ASCII码映射成索引,把数组中该索引对应的元素设为 1。这个时候,要查找一个字符就变得很快了:根据这个字符的ASCII码,在数组中对应的下标找到该元素,如果为0,表示字符串中没有该字符,否则字符串 中包含该字符。此时,查找一个字符的时间复杂度是O(1)。其实,这个数组就是一个hash表。这种思路的详细说明,详见本面试题系列的第13题。

     

    #include <stdio.h>

    #include <conio.h>

     

    char TheArray[256];

     

    void InitTheArray(const char * szFind)

    {

        while('/0'!=*szFind)

            TheArray[*szFind++] = 1;

    }

     

    void ProcessTheString(char * szDestination)

    {

        char * pFast;

        char * pSlow;

     

        pFast = pSlow = szDestination;

     

        while ('/0'!=*pFast)

        {

            if(0==TheArray[*pFast])

                *pSlow++ = *pFast++;        

            else

                pFast++;

        }

     

        *pSlow = '/0';

    }

     

    int main()

    {

        char szDes[] = "They are Students.";

        char szFind[] = "aeiou";

     

        InitTheArray(szFind);

        ProcessTheString(szDes);

     

        printf("%s", szDes);

     

        _getch();

        return 0;

    }

    展开全文
  • 删除指定字符串: 函数有删除一个字符串的,有删除指定字符串的,注意不同函数的思路。 #include #include #include /* 方法一:删除全部指定字符串 */ void delString(char *str, char *finstr) { char *pstr...

    删除指定字符串:

    函数有删除一个字符串的,有删除指定字符串的,注意不同函数的思路。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    /* 方法一:删除全部指定字符串 */
    void delString(char *str, char *finstr)
    {		
    	char *pstr = strstr(str, finstr);
    	if (NULL == pstr)
    	{
    		printf("没有找到要删除的字符串!");
    		return;
    	}
    	/* 每次从删除后的字符串再查询是否有相应的字符串,如果找到则继续删除 */
    	/* 这个FOR 效率低,每次都是从开头查询。 */
    	//for (pstr; pstr != NULL; pstr = strstr(str, finstr))
    	/* 每次从删除点开始向后查询,这样就可以提高效率,因为前面删除的就不需要再进行查询了 */
    	/* 只是我们给的这个目标字符串是故意这样设置的,因为删除后又有同样的字符串被组合到了一起 */
    	for (pstr; pstr != NULL; pstr = strstr(pstr, finstr))	
    	{//保保找到的字符串首地址
    		char *temp = pstr;
    		char *ptemp = pstr;
    		ptemp += strlen(finstr);
    		while (*temp != '\0')
    		{
    			*temp = *ptemp;
    			temp++;
    			ptemp++;
    		}
    		printf("%s\n", str);
    	}
    
    }
    
    /* 方法二:全部删除指定字符串 */
    void delAllString(char *str, char *chx)
    {
    	int i = 0;
    	int j = 0;
    	while ((str[i] = str[j]) != '\0')
    	{
    		int flag = 1;	//假定找到
    		//查找,每个字符对比,有一个不等就不等,预防母串提前结束。
    		for (int k = 0; k < strlen(chx); k++)
    		{
    			if (str[j + k] != chx[k] || str[j + k] != '\0')
    			{
    				flag = 0;
    				break;
    			}
    		}
    		if (flag == 0)
    		{
    			i++;
    			j++;	
    		}
    		else
    		{
    			j += strlen(chx);	//找到就跳过。
    		}
    	}
    }
    
    /* 方法一:删除一个字符串 */
    void delStr(char *str, char *chx)
    {
    	char *p = strstr(str, chx);
    	if (NULL == p)
    	{
    		return;
    	}
    	else
    	{
    		int length = strlen(chx);	//移动的差距
    		/* strlen(p) - strlen(chx):需要移动的距离 
    			循环是从查询到的要删除的字符串的开头地址开始循环
    		*/
    		for (int i = 0; i <= strlen(p) - strlen(chx); i++)
    		{
    			p[i] = p[i + length];			
    		}		
    	}
    }
    
    
    void main()
    {
    	char str[1024] = "ab123aabbeababcab58ab";
    	char *p = "ab";
    	printf("原字符串的值:%s\n", str);
    
    	//delString(str, p);
    	delStr(str, p);
    	printf("删除后字符串:");
    	printf("%s\n", str);
    
    	system("pause");
    }


    展开全文
  • 一)从字符串中删除指定子串 转载地址: http://hi.baidu.com/fangm/item/85b8db57b926ed948d12ed44 #include void delsub(char *str, char *sub) { char *psrc = str, *pdest = str, *psub, *p; if(...

    一)从字符串中删除指定子串

    转载地址:

    http://hi.baidu.com/fangm/item/85b8db57b926ed948d12ed44

    #include <iostream>
    
    void delsub(char *str, char *sub)
    {
    	char *psrc = str, *pdest = str, *psub, *p;
    
    	if((str == NULL) || (sub == NULL))
    		return;
    
    	while(*psrc)
    	{
    		p       = psrc;
    		psub   = sub;
    		while(*p && *p == *psub)
    		{
    			p++;
    			psub++;
    		}
    
    		if(*psub == 0)//找到一个子串
    			psrc = p;
    		else
    			*pdest++ = *psrc++;
    	}
    	*pdest = 0;
    }
    
    int main()
    {
    	char str[] = "askdaskaskaaaaadaskg";
    	char sub[] = "ask";
    	cout<<"first str = "<<str<<endl;
    	cout<<"sub      str = "<<sub<<endl;
    
    	delsub(str,sub);
    
    	cout<<"after del = "<<str<<endl;
    	return 0;
    }


     

    二)删除指定元素

     

    #include<iostream>
    using namespace std;
    #include <stdio.h>
    
    int main(void)
    {
    	char uu[20], *p, *sub = "ask", *str = "askdaskaskaaaaadaskg", *str2;
    	int n = 0, i = 0;
    	p = sub;
    	str2 = str;
    	while (*str2)
    	{
    		while (*p)
    		{
    			if (*p == *str2)
    				break;
    			p++;
    		}
    		if (*p == '\0')
    		{
    			uu[i] = *str2;
    			i++;
    		}
    		str2++;
    		p = sub;
    	}
    	uu[i] = 0;
    	str = uu;
    	printf("\n %s", str);
    	return 0;
    }



     

    展开全文
  • /*编程实现键盘输入一串字符串和一个字符,统计该字符串中指定字符出现的个数*/ #include<stdio.h> #include<string.h> main() { char str[100],c; int i=0,count=0; printf("请输入一个字符串:");...
  • 题目:输入两个字符串第一字符串中删除第二个字符串中所有的字符。  例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 方法1: package com.jredu.ch12; /*...
  • C 字符串删除指定字符,比如删除字符串中的空格   分类: C/C++ 2013-04-09 22:37:09 由于最近在找工作,在一个笔试的题要求删除字符串中中所有的空格,比如原数组 char array
  • /*在一个字符串中删除指定的字符,这种算法只用到原来的存储空间,不用另辟空间*/ char* DeleteChar(char* str,char ch) { assert(str != NULL); int iDes = 0; int iSrc = 0; while(str[iSrc] != '\0') { if...
  • 字符串中删除指定的字符的理解

    千次阅读 2014-01-17 16:55:33
    字符串中删除指定的字符的程序请参考: http://zhedahht.blog.163.com/blog/static/25411174200801931426484/ 博主何海涛对本博客文章享有版权。网络转载请注明出处http://zhedahht.blog.163.com/。整理出版物请...
  • 输入两个字符串第一个字符串中删除第二个字符串中的所有字符 比如输入“They are students." 删除之后的第一个字符串变成"The r stdnts." 思路是利用每个字符都有其对应的ASCII码值,将需要删除的字符的ascii为...
  • 字符串中删除指定的字符

    千次阅读 2014-10-27 21:18:55
    给定一个字符串如:“what a fuck day it is!”现在要把
  • 删除字符串中指定字符

    千次阅读 2019-02-14 15:09:18
    本题要求实现一个删除字符串中指定字符的简单函数。 函数接口定义:void delchar( char *str, char c );其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str出现的所有c字符删除。 ...
  • 删除字符串中指定字符: 以字符串****ABCD****abcd****为例 我们做4种删除方法: 1、删除全部的*号;输出应为:ABCDabcd 2、删除首部的*号;输出应为:ABCD****abcd**** 3、删除中部的*号;输出应为:****...
  • C语言删除字符串中指定字符串

    千次阅读 2014-12-18 11:37:02
    void replace_string(char * source_str,char * targ_str,char *val)/*将字符串中指定子字符串指定字符串代替,targ_str 是被替换的,val是替换的字符串*/ { char temp_sstr[513],result[513]; char * p,*q; ...
  • 版权声明:转载需标明该文链接。 ... 一、利用C++自带字符串函数: np1 = str.find_first_of('abc'); // 获取字符串中第一个指定字符(串)的位置 np2= str.find_last_of('.'); // 获取字符...
  • 题目:从字符串的指定位置删除指定长度的子串。例如,一个字符串为"abcdefg",指定第三个字符开始删除长度为3的子串。删除后字符串变为"abfg". 分析:(1)直接略过要删除的字符,使用strcpy将...
  • 题目:输入两个字符串第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 这里主要要分析两个方面: 1、如何判断那些...
  • 删除该字scrStr符串的所有delStr字符串(最终的字符串中不能包含delStr),要求打印删除后的结果以及删除了几个delStr字符串  4.代码运行打印格式:   请输入源字符串:java woaijava,i
  • /*编写算法,从字符串S中删除所有和字符串t相同的字符*/ #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; void move(string * S,int location); void compare(string * S...
  • 遍历字符串,发现相同的,就用下一个字符开始的子串向前一个覆盖,记录删除的字符个数k,然后记得在 len - k (最后的一个向后一个位置)的地方标记 '\0' 代码实现 int strRemoveSpecChar(char * str, const char c...
  • C++实现删除字符串中所有指定字符算法  (2008-11-02 20:06:26) 转载▼ 标签:  字符串处理   c   字符串   it 分类: C/C++技术 //VC++ 6.0编译通过 # ...
  • WUSTOJ 1231: 删除字符串中指定的字符 题目 原题链接 Description 明天就要英语考试了,小明明正在挑灯夜战背单词。小明明发现单词很难背,背一个忘一个。经过仔细研究,小明明发现单词难背的原因是因为某个...
  • C++ 删除字符串中指定字符串

    千次阅读 2017-02-23 03:53:18
    C/C++_功能实现_删除字符串中指定字符串 char *del_substr(char *str, char *delstr) {  char *p, *q;  char *src, *dst;  dst = src = str;  while(*src != '\0')  {  p = src;  q =...
  • 假设字符串为“cabcdefcgchci”,把该字符串中所有的字符‘c’删除后,结果为“abdefghi”. 代码 #include char *deleteChar(char *str,char c) { char *head = NULL; char *p = NULL; if(str ==NULL) { ...
  • 通过遍历,我们依次判定第一个字符串中是否存在第二个字符串中的第i个字符,如果存在,则删除该字符,因此该方法就删除而言的时间复杂度为O(n^2)。 显然,整个算法的时间复杂度还是较大的。 空间兑换时间的方法: ...
  • Java在字符串中查找匹配的子字符串

    万次阅读 多人点赞 2017-05-07 15:25:25
    Java在字符串中查找匹配的子字符串

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,115,459
精华内容 446,183
关键字:

从字符串中删除指定字符while