精华内容
下载资源
问答
  • 输入两个字符串,从第字符串中删除第个字符串中所有的字符。例 如,输入”They are students.”和”aeiou”, 则删除之后的个字符串变成”Thy r stdnts.” - 输入描述: 每测试输入包含2个字符串 - 输出...

    题目描述:

    输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例
    如,输入”They are students.”和”aeiou”,
    则删除之后的第一个字符串变成”Thy r stdnts.”
    - 输入描述:
    每个测试输入包含2个字符串
    - 输出描述:
    输出删除后的字符串
    - 示例1:
    输入
        They are students.
        aeiou
    输出
        Thy r stdnts.
    

    代码如下:

    """
    # _*_coding:utf-8_*_
    Name:str.py
    Date:1/15/19
    Author:westos-sql
    Connect:2910903196@qq.com
    Desc:...
    """
    Str1 = input('Str1: ')
    Str2 = input('Str2: ')
    
    for i in Str1:
        for j in Str2:
            if j == i:
                Str1 = Str1.replace(j,'')
    print(Str1)
    

    在这里插入图片描述

    测试结果:
    在这里插入图片描述

    展开全文
  • 输入两个字符串,从第个字符串中删除第个字符串中的所有字符 比如输入“They are students." 删除之后的个字符串变成"The r stdnts." 思路是利用每个字符都有其对应的ASCII码值,将需要删除字符的ascii为...

    输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符
    比如输入“They are students."
    删除之后的第一个字符串变成"The r stdnts."

    思路是利用每个字符都有其对应的ASCII码值,将需要删除的字符的ascii为下标储存在数组当中。
    利用两个指针分别指向原字符串和需要删除的字符串。
    因为我们已经将需要删除的字符串中的字符所对应的ASCII码作为下标储存在数组当中,所以在比较的时候只需要看原字符串中的字符所对应的ASCII码作为下标在数组中是否为1.
    这样说可能不好理解。看一下具体例子

    假如原字符串为

    char str1[] = "They aaaare students.";
    

    需要删除的为

    char str2[] = "aeiou";
    

    然后我们需要一个数组储存结果(将其初始化为0)

    int a[256] = { 0 };
    

    两个指针分别指向这两个字符串

    char* pFast = str1;
    char* pSlow = str2;
    

    我们想实现的是在字符串str1中找到‘a’,‘e’,‘i’,‘o’,‘u’这几个字符并删除
    第一步我们想在str1中找到所有的字符‘a’并删除
    也就是说我们所有想删除的字符都在str2中

    接下来我们把需要删除的字符对应的ASCII码作为下标,然后储存在数组中
    利用一个for循环

    for (i = 0; i < n; ++i){
    	a[str2[i]] = 1;
    }
    

    str2[i]对应的是所有需要在str1中删除的字符
    将其对应的ASCII码作为下标也就是 a[str2[i]];
    将其赋为1,表示该字符需要删除

    接下来实现代码的核心部分

    while (*pFast){
    	if (a[*pFast] == 1){
    		*pFast++;
    	}
    	*pSlow++ = *pFast++;
    }
    

    因为我们需要删除的是str1中的字符,所以这里的 while(pFast)是为了遍历str1
    接下来 if (a[pFast] == 1) 说明我们要删除这个字符。我们给pFast++,让pFast指针跳过这个字符,指到下一个字符,然后再赋给pSlow。
    这样做本质上是遍历str1,如果这个字符不需要删除,就拿过来赋给pSlow,然后pFast和pSlow同时自增
    如果需要删除,先给pFast自增,再
    pSlow++ = *pFast++;(自增同时赋值)

    别忘了最后

    *pSlow = '\0';
    

    给字符串结尾!

    但是这样的思路还存在一些问题。先看上面这个思路的完整代码,我们再来修改

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void DeleteStr(char* str1, char* str2){
    	char* pFast = str1;
    	char* pSlow = str2;
    	int a[256] = { 0 };
    	int i;
    	int n = strlen(str2);
    	for (i = 0; i < n; ++i){
    		a[str2[i]] = 1;
    	}
    	while (*pFast){
    		if (a[*pFast] == 1){
    			*pFast++;
    		}
    		*pSlow++ = *pFast++;
    	}
    
    	*pSlow = '\0';
    }
    int main(){
    	char str1[] = "They are students.";
    	char str2[] = "aeiou";
    	DeleteStr(str1, str2);
    	printf("%s\n", str2);
    	system("pause");
    	return 0;
    }
    

    这样去做题目中的要求我们可以实现,但是拓展之后,如果相同的字符连续出现,我们无法做到连续删除

    比如原字符串变成这样

    char str1[] = "They aaaare students.";
    

    仔细想想,来看我们上面的核心代码

    while (*pFast){
    	if (a[*pFast] == 1){
    		*pFast++;
    	}
    	*pSlow++ = *pFast++;
    }
    

    我们在确认一个字符需要删除之后,直接就跳过该字符,下一个字符没有进行判断是否应该删除就进行了赋值
    所以要将这段代码进行修改

    while (*pFast){
    	if (a[*pFast] == 0){
    		*pSlow = *pFast;
    		pSlow++;
    	}
    	pFast++;
    }
    

    这次我们判断

    if (a[*pFast] == 0){}
    

    就说明不需要删除可以赋值
    直接

    *pSlow = *pFast
    

    紧接着下来的一步我们不着急赋值,因为我们最终使用pSlow保存的结果,所以每赋值一次就先给pSlow++,这是pSlow++放在if语句中的原因。试想如果将pSlow++放在if语句之外,那么我们没有给pSlow赋值,指针也会不断往前走,这样肯定会出问题。
    先给pSlow++之后,在if语句之外给先给pFast++
    这时开始第二次循环
    这样做就能够实现在每一次赋值之前进行判断,就算相同字符连续出现也可以实现删除
    完整代码如下

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void DeleteStr(char* str1, char* str2){
    	char* pFast = str1;
    	char* pSlow = str2;
    	int a[256] = { 0 };
    	int i;
    	int n = strlen(str2);
    	for (i = 0; i < n; ++i){
    		a[str2[i]] = 1;
    	}
    	while (*pFast){
    		if (a[*pFast] == 0){
    			*pSlow = *pFast;
    			pSlow++;
    		}
    		pFast++;
    	}
    	*pSlow = '\0';
    }
    int main(){
    	char str1[] = "They aaaare students.";
    	char str2[] = "aeiou";
    	DeleteStr(str1, str2);
    	printf("%s\n", str2);
    	system("pause");
    	return 0;
    }
    
    展开全文
  • 输入两个字符串,从第字符串中删除第个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的个字符串变成”Thy r stdnts.”。 一种思路 直接通过遍历,我们依次判定...

    题目

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

    第一种思路

    直接通过遍历,我们依次判定第一个字符串中是否存在第二个字符串中的第 i 个字符。如果存在,则删除该字符。该方法的时间复杂度为O(n^2)

    代码

    def DeleteString(str1, str2):
        if str1 is None or str2 is None:
            return
        for i in str1:
            if i in str2:
                str1 = str1.replace(i, '')  # 进行字符替换
        return ''.join(str1)
    
    
    if __name__ == '__main__':
        print(DeleteString("They are students", "aeiou"))
        print(DeleteString("With the development of AI, high-dimensional data", "aeiou"))

    运行结果为:

    Thy r stdnts
    Wth th dvlpmnt f AI, hgh-dmnsnl dt

     

    第二种思路

    以空间换时间。我们可以创建一个用数组实现的简单哈希表来存储第二个字符串。

    对于字符串,由于 ASCII 码的所有符号为256个。那么,我们可以申请一个数组用来代表这256个字符是否存在于第二个字符串中。如果有,则标记为1;如果没有,则标记为0。
    那么,我们从头到尾扫描第一个字符串中的每一个字符时,使用O(1)的时间就能读取出该字符对应哈希表中的 ASCII 值。如果值为1,说明它存在于第二个字符串中,就需要删除。如果第一个字符串长度是n,那么总的时间复杂度为O(n)

    代码

    def DeleteString(str1, str2):
        if str1 is None or str2 is None:
            return
        hashTable = [0] * 256  # 初始化哈希表,以数组形式展现
        for i in str2:
            hashTable[ord(i)-ord('a')] = 1  # 使用ord()将字符转换为数字索引
        for i in str1:
            if hashTable[ord(i)-ord('a')] == 1:  # 查询i字符是否在哈希表中已存在
                str1 = str1.replace(i, '')  # 进行字符替换
        return str1
    
    
    if __name__ == '__main__':
        print(DeleteString("They are students", "aeiou"))
        print(DeleteString("With the development of AI, high-dimensional data", "aeiou"))
    

    运行结果为:

    Thy r stdnts
    Wth th dvlpmnt f AI, hgh-dmnsnl dt

     

     

    展开全文
  • 题目:输入两个字符串,从第字符串中删除第个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的个字符串变成”Thy r stdnts.”。  要编程完成这道题要求的功能可能并不...

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

       要编程完成这道题要求的功能可能并不难。毕竟,这道题的基本思路就是在第一个字符串中拿到一个字符,在第二个字符串中查找一下,看它是不是在第二个字符串中。如果在的话,就从第一个字符串中删除。但如何能够把效率优化到让人满意的程度,却也不是一件容易的事情。也就是说,如何在第一个字符串中删除一个字符,以及如何在第二字符串中查找一个字符,都是需要一些小技巧的。首先我们考虑如何在字符串中删除一个字符。由于字符串的内存分配方式是连续分配的。我们从字符串当中删除一个字符,需要把后面所有的字符往前移动一个字节的位置。但如果每次删除都需要移动字符串后面的字符的话,对于一个长度为n的字符串而言,删除一个字符的时间复杂度为O(n)。而对于本题而言,有可能要删除的字符的个数是n,因此该方法就删除而言的时间复杂度为O(n2)事实上,我们并不需要在每次删除一个字符的时候都去移动后面所有的字符。我们可以设想,当一个字符需要被删除的时候,我们把它所占的位置让它后面的字符来填补,也就相当于这个字符被删除了。在具体实现中,我们可以定义两个指针(pFastpSlow),初始的时候都指向第一字符的起始位置。当pFast指向的字符是需要删除的字符,则pFast直接跳过,指向下一个字符。如果pFast指向的字符是不需要删除的字符,那么把pFast指向的字符赋值给pSlow指向的字符,并且pFastpSlow同时向后移动指向下一个字符。这样,前面被pFast跳过的字符相当于被删除了。用这种方法,整个删除在O(n)时间内就可以完成。接下来我们考虑如何在一个字符串中查找一个字符。当然,最简单的办法就是从头到尾扫描整个字符串。显然,这种方法需要一个循环,对于一个长度为n的字符串,时间复杂度是O(n)由于字符的总数是有限的。对于八位的char型字符而言,总共只有28=256个字符。我们可以新建一个大小为256的数组,把所有元素都初始化为0。然后对于字符串中每一个字符,把它的ASCII码映射成索引,把数组中该索引对应的元素设为1。这个时候,要查找一个字符就变得很快了:根据这个字符的ASCII码,在数组中对应的下标找到该元素,如果为0,表示字符串中没有该字符,否则字符串中包含该字符。此时,查找一个字符的时间复杂度是O(1)

    下面给出完整的c代码:

    #include<stdio.h>
    #include<string.h>
    #include<memory.h>
    void delete_ch(char *src, char *del_chs) {
    	int hash[256];
    	int i;
    	char *p_slow, *p_fast;
    	int del_len = strlen(del_chs);
    	p_slow = src;
    	p_fast = src;
    	memset(hash, 0, sizeof(int) * 256);
    	for(i = 0; i < del_len; i++)
    		hash[del_chs[i]] = 1;
    	while(*p_fast) {
    		if(hash[*p_fast] == 1) {
    			p_fast++;
    		}
    		*p_slow++ = *p_fast++;
    	}
    	*p_slow = '\0';
    }
    void main() {
    	char src[] = "They are students";
    	char del_chs[] = "aeiou";
    	delete_ch(src, del_chs);
    	printf("%s\n", src);
    }


    展开全文
  • #include&lt;stdio.h&gt;#include&lt;...// 删除字符串中指定字母函数char* deleteCharacters(char * str, char * charSet){ int hash [256]; if(NULL == charSet) return str; ...
  • 字符数组作函数参数编程实现如下功能:在字符串中删除与某字符相同的字符。 **提示信息: “Input a string:” “Input a character:” **输入格式要求:"%s" **输出格式要求:“Results:%s\n” 程序运行示例1如下...
  • Python编程PTA题解——删除字符

    千次阅读 2020-03-21 14:57:55
    Description:输入一个字符串 str,再输入要删除字符 c,大小写不区分,将字符串 str 中出现的所有字符 c 删除。 Input:在一行中输入一行字符二行输入待删除字符 Output:输出仅一行,输出删除后的字符串 ...
  • 习题5.9 键盘上输入一个字符串和一个字符字符串中删除给定的字符。 代码块: package App; import java.util.*; public class App1 { public static void main(String[] args) { String str; Scanner ...
  • 题目要求: 编程实现字符串中删除指定的字符
  • 1、字符串反转  这道题目非常简单,但是有一地方需要强调一下:对于string 类型,它的size()返回值并不是 int 类型,而是string::size_type 类型,它是一无符号类型的值。...比如,假设 n 是一
  • 例题:请编写一函数,用来删除字符串中的所有空格。 例如,输入we l come,则输出为welcome。 请勿改动主函数main与其它函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 代码如下: #include<...
  • 例题:请补充main函数,该函数的功能是:键盘输入一个字符串,即一指定,然后把这个字符及其后面的所有字符全部删除,结果仍然保存在原串中。 例如:输入“1234567”,指定字符为 “4”,则输出 “123”。 注意...
  • 例题:请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把1到第n个字符,平移到字符串的最后,把第n+1到最后的字符移到字符串的前部。 例如,字符串中原有的内容为asdfgh,n的值为2,移动后,...
  • C 库函数 char *fgets(char *str, int n, FILE *stream) 指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况...
  • 编程将给定字符串中指定字符删除

    千次阅读 2018-06-05 13:15:27
    1 #include&lt;stdio.h&gt; #include&lt;string.h&gt; int main() { int i; char *p,*q; char str[100]; char st[100]; q=st; p=str; gets(str);... for(i=0;*(p+i)!...i++) ... i...
  • 例题:请补充fun函数,该函数的功能是:把字符下标能被2和3同时整除的字符从字符串s中删除,把剩余的字符重新保存在字符串s中。字符串s键盘输入,其长度作为参数传入fun函数。 例如,输入 “abcdefghijk”,则输出 ...
  • C语言:编写一函数,删除字符串中指定位置上的字符,若删除成功,返还被删除字符串,否则返还空值。 #include <stdio.h> //删除字符串的元素 int delet(char*a,int n){ //删除字符串a的第n字符。...
  • Linux基础,四天 课程内容:shell基础 文件清单: shiyan1.sh:一期讲义实验6.1,使用test测试编写unload程序,达到文件卸载的功能 ...编写一函数,作用是把一个字符串循环右移n个位。比如原来是
  • C语言删除字符串中指定字符

    千次阅读 2021-01-06 12:09:34
    输入一个字符串以及一个字符,删去字符串中相同字符 实现如下: #include<stdio.h> int main() { void del(char str[],char c);//声明函数del char str[80],c;//字符数组str以及要删除字符c printf("请...
  • 例题:请补充fun 函数,该函数的功能是:删除字符数组中比指定字符小的字符,指定字符从键盘输入,结果仍保存在原数组中。 例如,输入 “asdfghj”,指定字符为 “f”,则结果输出 “sfghj”。 请勿改动主函数main与...
  • 编写函数fun,函数的功能是:从字符串中删除指定的字母。同一字母的大小写按不同字符处理。 若程序执行时,输入字符串为:turbo c and Borland c++ 键盘上输入字符n,则输出后变为:turbo c ad borlad c++ 如果...
  • 例题:请编写一函数void fun(char orig[],char result[],int flg),其功能是:删除个字符串中指定下标的字符。其中,orig指向原字符串,删除后的字符串存放在result所指的数组中,flg中存放指定的下标。 例如:...
  • 例题:请编写函数fun,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一新的字符串。 例如,若字符串数组中的M个字符串为: 1 1 1 1 2 2 2 2 2 2 2 3 3 4 4 4 4 则合并后的...
  • 例题:请编写函数fun ,其功能是:将str所指字符串中ASCII值为偶数的字符删除。串中剩余字符形成一新串放入s所指的数组中。 例如,若str 所指字符串中的内容为12345678,其中字符2的ASCII码值为偶数、字符4的ASCII...
  • 例题:请编写函数fun,其功能是:将str所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一新串放在s所指的数组中。 例如,若str所指字符串中的内容为asdf,则s所指的数组中的内容应是df。 请勿改动主函数main...
  • 例题:请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把1到第n个字符,平移到字符串的最后,把第n+1到最后的字符移到字符串的前部。 例如,若str所指字符串中的内容为ABCDEFG12345,其中...
  • 只出现一次的字符(Java)

    千次阅读 2018-08-07 09:44:44
    题目: 在字符串中找出只...这样一次扫描去统计这个字符串中字符出现的次数,二次去统计出现结果为1的次数,并输出对应的字符。 public class Main { //输出0代表没有满足条件的 public stat...
  • 例题:请编写函数fun,其功能是:将str所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全部删除;串中剩余字符所形成的一新串放在s所指的数组中。 例如,若str所指字符串中的内容为ABCDEFG...
  • 字符串s中所有的字符c删除

    千次阅读 2019-05-23 17:31:42
    /*将字符串s中所有的字符c删除*/ #include<stdio.h> #include<string.h> #define N 100 void main() { char s[N]; int i,j; printf("请输入字符串s:\n"); gets(s); for(i=0,j=0;s[i]!='\0';i++) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,927
精华内容 59,170
关键字:

编程删除从第i个字符开始的n个字符