精华内容
下载资源
问答
  • 从一个给定的字符串中删去某一个给定的字符。import java.util.Scanner; public class DeleteWord { public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请...

    从一个给定的字符串中删去某一个给定的字符。

    import java.util.Scanner;
    public class DeleteWord { 
    	public static void main(String[] args){
    	Scanner sc = new Scanner(System.in);
    	System.out.println("请输入字符串");
    	String s = sc.nextLine();
    	String s1 = "";
    	char c = 'a';//给出的特定字符
    	for(int i = 0;i<s.length();i++){
    		char ch = s.charAt(i);
    		if(ch!=c){
    			s1+=ch;
    		}
    	}
    	System.out.println(s1);
    	}
    }


    展开全文
  • 第一种思路:不可避免的是遍历第一个字符串,如果遍历一个字符,都需要第二个字符串中查找其存不存在,那么复杂度会是O(nm),当然由于字符数有限,所以m是个常量。关于查找速度最快的当然是hash表,对于8位字符,...

    例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。

    第一种思路:不可避免的是遍历第一个字符串,如果遍历一个字符,都需要去第二个字符串中查找其存不存在,那么复杂度会是O(nm),当然由于字符数有限,所以m是个常量。关于查找速度最快的当然是hash表,对于8位字符,size=2^8足矣。

    关于删除字符,后面的字符要往前移,如果每删除一个就移一次,O(n^2)这复杂度实在太高,仅用快慢指针就可以搞定,这个方法非常有用,比如求解循环链表。

    初始化:快慢指针指向第一个字符

    循环:如果快指针指的是不需要删除的字符,将值赋给慢指针所指的值后,快慢指针同时++;如果快指针指向待删除字符,那么直接++;

    终止:快指针指向'\0'

    第二种思路:仅利用快慢指针的思想得到结果。

    两种方法对比,利用哈希表的方法明显比第二种方法简单。

    1. #include <iostream.h>  
    2.   
    3. #define NUMBER 256  
    4.   
    5. void Delete(char *first, char *second)  
    6. {  
    7.     int i;  
    8.     int hashtable[NUMBER];  
    9.     for(i=0; i<NUMBER; i++)  
    10.         hashtable[i]=0;  
    11.   
    12.     char *p=second;  
    13.     while(*p)  
    14.     {  
    15.         hashtable[*p]=1;  
    16.         p++;  
    17.     }  
    18.   
    19.     char *slow=first;  
    20.     char *fast=first;  
    21.     while(*fast)  
    22.     {  
    23.         if(hashtable[*fast]==0)  
    24.         {  
    25.             *slow=*fast;  
    26.             slow++;  
    27.         }  
    28.         fast++;  
    29.     }  
    30.     *slow='\0';  
    31. }  
    32.   
    33. void main()  
    34. {  
    35.     char first[]="They are students.";  
    36.     char second[]="aeiou";  
    37.     Delete(first, second);  
    38.     cout<<first<<endl;  
    39. }  
    40. //另外一种方法,仅仅利用快慢指针达到目的。
    41. #include <iostream>


      #define NUMBER 256


      using namespace std;
    42. char firstArray[] = "They are students.";
      char secondArray[] = "aeiou";
      const int firstSize = sizeof firstArray / sizeof *firstArray;
      const int secondSize = sizeof secondArray / sizeof *secondArray;


      bool flag[NUMBER];


      void deleteArray(char *firstArray, char *secondArray)
      {
      if(firstArray == NULL || secondArray == NULL)
      return;


      for(int i = 0; i < NUMBER; i++) {
      flag[i] = false;
      }


      for( i = 0; i < secondSize; i++) {
      int pos = static_cast<int>(secondArray[i]);
      flag[pos] = true;
      }


      char *fast = firstArray, *slow = firstArray;


      while(*fast != '\0') {
      if(flag[*fast] == false) {
      *slow = *fast;
      slow++;
      }
      fast++;
      }
      *slow = 0;
      }
    43. void main()
      {
      deleteArray(firstArray, secondArray);
      cout << firstArray << endl;
         
      }
    44. //第三种比较简单的方法:没有利用快慢指针,但是同样达到了目的。
    45. #include <iostream>
      #include <cstring>
      
      char * string_del_characters( char * const src, const char * const dest )
      {
         int destLen = strlen( dest );
         int hash_table[256] = { 0 };
         char * p = src;
         int index = 0;
         for( int i = 0; i < destLen; i++ )
         {
            hash_table[ (int)dest[i] ] = 1;
         }
         while( *p != '\0' )
         {
            if( 0 == hash_table[(int)*p] )
            {
               src[index++] = *p;
            }
            p++;
         }
         src[index] = '\0';
         return src;
      }
      
      int main( int argc, char ** argv )
      {
         char src[] = "They are students.";
         char dest[] = "aeiou";
         char * pResult = string_del_characters( src, dest );
         std::cout << pResult << std::endl;
      }

    展开全文
  • 从一个字符串(A)中删去另一个字符串(B)中已经出现的字符 1.首先要对另一个字符串进行标记 标记的方法有很多我举一个例子: 用一个bool数组来存26个字母并且对他们初始化为false,如果另外那个字符串存在,则将它...

    <span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">从一个字符串(A)中删去另一个字符串(B)中已经出现的字符</span>

    1.首先要对另一个字符串进行标记

    标记的方法有很多我举一个例子:

    用一个bool数组来存26个字母并且对他们初始化为false,如果另外那个字符串存在,则将它变为true

    比如 num[2]=true,就是说明 b 这个字符出现于另外一个字符串

    2.就是去掉那些在A中已经被标记的字符

    你可以用移动的方法去掉它:(这种方法的时间复杂度为n*n)不提倡

    for(int i=0;i<n;i++)

    {
        k=A[i]-'a';
      if(num[k])
      {
      for(int j=i;j<n-1;j++)
      A[j]=A[j+1];

      n--;
      }

    }

    另外的一种方法,时间复杂度为n

    我们可以设置两个指针 low ,high,开始的时候他们都指向A字符串的第一个元素即 low=high=A;

    当high指针指向的字符不是ture,我们将*low=*high 并且 low++ ,high++;

    当high指针指向的字符是ture,我们直接high++,其他的不处理;

    之后我们需要把踢出去的字符截断,直接*low='\0';

    之后直接打印出字符串A;OK 了

    话不多说,直接上代码,是最详细的!如果有问题的话,可以直接评论,我会尽快回答的!
    <pre name="code" class="cpp">#include<iostream> 
    using namespace std;
    #include<cstring>
    bool visited[26]; //设置全局的bool数组,来标记字符的状态
    
    int main() 
    {
      int i,len1,len2,num;
      char str1[100];
      char str2[100];
      cin>>str1>>str2;//输入字符串
      for(i=0;i<26;i++) 
      visited[i]=false;//初始化标志数组
      len1=strlen(str1);
      len2=strlen(str2);
      
      for(i=0;i<len2;i++)//对字符串2中出现的字符进行标志 
       {
       	 num=str2[i]-97;
       	 visited[num]=true;
       }
     /*下面是这个程序的核心*/ 
     
     char *high,*low;//对两个指针初始化,指向字符串的第一个字符 
      high=low=str1;
     while(*high!='\0')
      {
      	
       if(!visited[*high-97]) 
       {
      	*low=*high;
      	high++;
      	low++;
       }
       else
      	 high++;//直接跳过   
      } 
     *low='\0';//直接截断字符串,删去多余的字符
     if(str1[0]=='\0')  cout<<"字符串1中的字符与字符串2中的字符完全重复"<<endl; 
     else cout<<str1<<endl;
     return 0; 
    }
    


    
    

    展开全文
  • 字符串删去前n

    2019-11-17 16:08:33
    写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 输入 数字n 一行字符串 数字m 输出 m开始的子串 样例输入 6 abcdef 3 样例输出 cdef #include<stdio.h> #include<string.h> ...

    题目描述
    有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
    输入
    数字n 一行字符串 数字m
    输出
    从m开始的子串
    样例输入
    6
    abcdef
    3
    样例输出
    cdef

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int n,m,i;
        char s[100];
        scanf("%d",&n);
        getchar();/**/消空格;**
        gets(s);
    
        scanf("%d",&m);
    
        for(i=m-1;i<n;i++)
        {
            printf("%c",s[i]);
        }
        return 0;
    }
    
    
    展开全文
  • 让我们来举一个例子:在上图字符串B是A的子串,B第一次在A出现的位置下标是2(字符串的首位下标是0),所以返回 2。我们再看另一个例子:在上图字符串B在A并不存在,所以返回 -1。为了统一概念,在后文中...
  • 输入一串字符,再输入一个指定字符,将字符串中删去指定字符再显示出来。要求程序把输入字符串、删除指定字符和显示字符串的功能分别在各自单独的.cpp文件由外部函数来处理,主文件中的主函数只作调用各外部函数...
  • 用两个指针的方法 从一个字符串中删去另一个字符串中的指定字符 这里我们用元音字母代替
  • 给你一个字符串s,「k倍重复项删除操作」将会s选择k个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。你需要对s重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除操作...
  • DescriptionBX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S的字符串p,如果p在L出现,BX就可以选择是否将其删除,如果删除,则将删除后L...
  • 给你一个字符串s,「k 倍重复项删除操作」将会 s选择k个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对s重复进行无限次这样的删除操作,直到无法继续为止。 在执行完所有...
  • 从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下地字符按原来顺序组成的串。例如:“ ”,“a”,“xb”,“aaa”,“bbb”,“xabb”,“xaaabbb”都是串“xaaabbb”的子序列。(例子中的串不...
  • xsy 字符串游戏

    2020-07-20 16:05:29
    举个例子,L=‘abcdefg’ , S={‘de’},如果BX选择将’de’L中删去,则删后的L=‘abcfg’。现在BX可以进行任意多次操作(删的次数,顺序都随意),他想知道最后L的最短长度是多少。 Input 输入的第一行包含...
  • 给你一个字符串s,「k 倍重复项删除操作」将会 s选择k个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对s重复进行无限次这样的删除操作,直到无法继续为止。 在执行完所有...
  • 给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完...
  • 给你一个字符串s,「k 倍重复项删除操作」将会 s选择k个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。你需要对s重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除...
  • 给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完...
  • 从一个字符串中删去某个字符。 Input 有多个测试用例,每个测试用例占两行,第一行是要删除的字符,第二行是一个字符串。字符串长度不超过1024。 Output 对应每个测试用例,单独输出一行:删除那个字符之后的...
  • 给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完...
  • 给你一个字符串s,「k 倍重复项删除操作」将会 s选择k个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对s重复进行无限次这样的删除操作,直到无法继续为止。 在执行完所有...
  • 给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完...
  • 给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完...
  • 给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完...
  • 给你一个字符串s,「k 倍重复项删除操作」将会 s选择k个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。你需要对s重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除...
  • BZOJ2121 字符串游戏

    2019-09-23 18:47:02
    BX正在进行一个字符串游戏,他手上有一个字符串L,以及其 他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S的字符串p,如果p在L出现,BX就可以选择是否将其删除,如果删除,则将删除后L 分裂成的...
  • LeetCode刷题之1209....给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。你需要对 s 重复进行无限次这样的删除操作,...
  • 所谓「K 回文」:如果可以通过从字符串中删去最多 k 个字符将其转换为回文,那么这个字符串就是一个「K 回文」。 示例: 输入:s = "abcdeca", k = 2 输出:true 解释:删除字符 “b” 和 “e”。 提示: 1 ...
  • 题目:给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在...
  • 给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完...
  • 给你一个字符串 s,「k 倍重复项删除操作」将会 s 选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 289
精华内容 115
关键字:

从一个字符串中删去一个字符