精华内容
下载资源
问答
  • 2017-08-18 09:34:23
    //    1.在字符串1中把字符串2中的字母挨个找一遍,所以要遍历字符串2
    //    2.将字符串1中出现的字母删掉,用splite,【split("指定字符串"),用来切割字符串中指定的字符串的,返回的是字符串的数组】
    //    3.把返回的数组变成字符串,用join【join用来对数组进行拼接】
        var a = "abcdefgabcdefgabcdefgabcdefg";
        var b = "cd";
    //    for(var i = 0;i<b.length;i++){
    //        a = a.split(b[i]).join("");
    //    }
    //    console.log(a);


    //    第二种方法  使用replace方法;
          var patt = /cd/g;
          var res = a.replace(patt,"");
          console.log(res);
    更多相关内容
  • 输入两个字符串一个字符串中删除第二个字符串中的所有字符 比如输入“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;
    }
    
    展开全文
  • 输入两个字符串一个字符串中删除第二个字符串中所有的字符 例如,输入str1为“ They are students.” 和str2为 “aeiou”, 则删除之后的第一个字符串变为“Thy r stdnts.” 题目分析:如果使用最简单多次遍...

    作者:小 琛
    欢迎转载,请标明出处

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

    题目分析:如果使用最简单多次遍历法,会导致时间复杂度极高,算法不够优化.

    1. 这里可以采用空间换时间的方法。定义一个数组,大小为256(char类型的字符为0-255),arr[256]全部初始化为0
    2. 遍历str2,将每个字符以ASSCLL码值来对应数组下标,将该下标指向内容进行++操作
    3. 遍历srr1,再次利用每个字符的ASSCLL码值对应数组下标,若该下标所指向的内容不为0,则表示str2中有该字符,删除该字符即可。
    #include <iostream>
    #include <string.h>
    //1、输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符
    //例如,输入“ They are students.” 和 “aeiou”, 则删除之后的第一个字符串变为“Thy r stdnts.”
    void delete_str(std::string& str1,  std::string& str2)
    {
    	if (str1.empty() || str2.empty())
    		return;
    	size_t arr[256] = { 0 };
    	for (auto ch : str2)
    	{
    		arr[ch]++;
    	}
    	for (size_t i = 0; i < str1.size();i++)
    	{
    		if (arr[str2[i]] != 0)
    			str1.erase(i, 1);
    	}
    }
    void text1()
    {
    	std::string str1;
    	std::string str2;
    	std::getline(std::cin, str1);
    	std::getline(std::cin, str2);
    	delete_str(str1, str2);
    	for (auto ch : str1)
    	{
    		std::cout << ch;
    	}
    }
    

    反思总结:要实现一道题目解析一类题目,在字符串类型的题目中,定义数组并利用ASSCLL码值来解决问题,是常用手段,要养成惯性思维。

    展开全文
  • 输入两个字符串一个字符串中删除第二个字符串中的所有字符 比如输入第一个字符串:“They are students." 第二个字符串: "aeiou" 删除之后的第一个字符串变成"The r stdnts." 题目分析(思路): 创建三个...

    题目:

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


    题目分析(思路):

    创建三个string类对象 第一个s1第二个str2为题目要求的字符串

    第三个str3则用来接收最后需要输出的字符串 

    循环遍历上面两个字符串 str1 str2

    如果str1中出现了str2中的任何一个则跳过看下一个字符 然后将str1中的下一个字符再与str2中的字符进行一一比较

    以此类推 相同跳过 str1中没有一个与str2中的字符相同则压入str3中


    代码展示:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
    	string str1;
    	string str2;
    	string str3;
    	char n=0,m=0;
    	while (1) {
    		n = getchar();
    		if (n == '\n') {
    			break;
    		}
    		str1.push_back(n);
    	}
    	while (1) {
    		m = getchar();
    		if (m == '\n') {
    			break;
    		}
    		str2.push_back(m);
    	}
    	bool sign = true;
    	string::iterator it1 = str1.begin();
    	string::iterator it2;
    	for (it1;it1 != str1.end();++it1) {
    		for (it2=str2.begin();it2 != str2.end();++it2) {
    			if (*it1 == *it2) {
    				sign = false;
    				break;
    			}
    		}
    		if (sign==true){
    			str3.push_back(*it1);
    		}
    		sign = true;
    	}
    	cout << str3.c_str() << endl;
    		system("pause");
    		return 0;
    }

    部分代码分析:

    while (1) {
    		n = getchar();
    		if (n == '\n') {
    			break;
    		}
    		str1.push_back(n);
    	}

    这段代码 ↑ 是输入一个字符串str

    bool sign = true;
    	string::iterator it1 = str1.begin();
    	string::iterator it2;
    	for (it1;it1 != str1.end();++it1) {
    		for (it2=str2.begin();it2 != str2.end();++it2) {
    			if (*it1 == *it2) {
    				sign = false;
    				break;
    			}
    		}
    		if (sign==true){
    			str3.push_back(*it1);
    		}
    		sign = true;
    	}

    这段代码 ↑ 应该是解这个题目的关键核心

    巧妙之处在于定义了一个bool变量 用来标记字符串str2中的其中一字符是否与str1中的其中一个字符相同

    相同则标记为false 然后跳出循环 进行str1中下一个字符的判断 以此类推

    需要注意的是 在压入str3后 要将标记sign重新置为true

    否则上面一步sign被置为false  如果str1中下一个字符与str2中字符没有一个相同 那么也不会被压入str3中

    展开全文
  • 如何Python字符串中删除最后一个字符?Python支持负索引切片和正切片。负索引 -1 到-(iterable_length)开始。我们将使用负切片可迭代对象的末尾获取元素。索引 -1 迭代器获取最后一个元素。索引-2 迭代...
  • 今天机试做了一道题: ...思路:首先要将第一个字符串中的每个字符截取出来,截取成单个字符,然后用contains方法进去比较,如果第二个字符串中包含有第一个字符串中的字符,就舍弃掉,如果不包含则保留使用Stri...
  • 输入两个字符串第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 第一种思路 直接通过遍历,我们依次判定第一个...
  • 当用户输入了字符串,可以不利用循环求长度,因为每一个字符数组都会在结尾存放一个转义字符\0;然后编写一个循环语句,用循环依次判定字符数组s的每个字符与x是否相等,若不相等则赋给另一个数组存放,若相等则不...
  • 习题5.9 键盘上输入一个字符串一个字符,字符串中删除给定的字符。 代码块: package App; import java.util.*; public class App1 { public static void main(String[] args) { String str; Scanner ...
  • 编制函数fun,其功能是:删除一个字符串中指定的一、问题描述:键盘输入一个字符串给str和一个字符给c,删除str的所有字符c并输出删除后的字符串str。输入:第一行是一个字符串; 第二行是一个字符。输出:删除...
  • 通过遍历,我们依次判定第一个字符串中是否存在第二个字符串中的第i个字符,如果存在,则删除该字符,因此该方法就删除而言的时间复杂度为O(n^2)。 显然,整个算法的时间复杂度还是较大的。 空间兑换时间的方法: ...
  • **删除字符串内的空格 */ #include<stdio.h> #include<string.h> //遍历元字符串删除空格 char *func(char *str) { int j = 0; for(int i=0;i<strlen(str);i++) { if(str[i] != ' ') { str...
  • 原题如下:输入2个字符串一个字符串中删除第二个字符串中的所有字符 输入 'They are students' 'aeiou' 输出:Thy r stdnts (如果是你,你第一时间想到的是用什么方法呢?) 当时使用的方法如下,因为...
  • 删除字符串中所有指定的字符,将结果保存到一个新的字符串中并输出*/ #include<stdio.h> #include<string.h> main() { char str[100],s[100],c; int i=0,j=0; printf("请输入一个字符串:"); ...
  •  例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 方法1: package com.jredu.ch12; /** * 2、在字符串中删除特定的字符。 题目:输入两个字符串第一字符...
  • 输入两个字符串一个字符串中删除第二个字符串中所有的字符,例如:输入“They are students.“和"aeiou”,则删除之后的第一个字符串变成“Thy r stdnts"。 思路: 将第二个字符串的元素一一拿出用来和第一个...
  • import java.util.Scanner; public class Main{ public static void main(String[]args){ Scanner str = new Scanner(System.in); String STR = str.... /***system.in.read()方法的作用是键盘读出一个字符
  • 2.数组的下标是字符串的返回字符,因为char可以转int,这样每一个字符都有一个独一的数组元素,并且字符对应 的ASCII码值是它的数组下标, 3.把第二个字符串的字符所对应的数组元素全部按置为1,反正是见到它们就...
  • java字符串删除字符串Sometimes we have to remove character from String in java program. But java String class doesn’t have remove() method. So how would you achieve this? 有时我们必须在Java程序中从...
  • C删除字符串中的最后一个字符

    千次阅读 2021-05-21 02:59:38
    该程序删除每个单词的最后一个字符.#include#include#includeint main(int argc, char*argv[]){char *string;char *ptr;string = (char*)malloc(100);puts("Input a String");fgets(string,100,stdin);printf(...
  • 输入两个字符串一字符串中删除第二个字符串中所有的字符 输入描述: “They are students” “aeiou” 输出描述: Thy r stdnts 程序代码: package com.yt.dayPractice; import java.util.ArrayList...
  • 输入两个字符串第一字符串中删除第二个字符串中所有的字符。例 如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.” - 输入描述: 每个测试输入包含2个字符串 - 输出...
  • 字符串中如何删除一个字符

    万次阅读 多人点赞 2019-04-18 00:00:38
    字符串中我们怎么删除一个字符 第一种办法,找到该字符,后面的字符挨个挨个往前移动。直接上代码: #include using namespace std; void deletestr_T(char *str, char ch) { int len = strlen(str); for (int i = 0...
  • 因为是要删除字符串中的指定函数,所以要定义出字符串以及字符,即str[]和c。函数接口为void delchar(char*str,char c); #include<stdio.h> int main() { void delchar(char*str,char c); char str[],c;...
  • Python从字符串中删除字符

    万次阅读 2020-07-05 20:54:52
    Sometimes we want to remove all occurrences of a character from a string. There are two common ways to achieve this. 有时我们想从字符串中删除... Python从字符串中删除字符 (Python Remove Character fr...
  • 你的算法存在不足是你出现这问题的主要原因你应该这样处理:循环处理s1的所有字符,如果该字符出现在s2,那么就不再处理如果没有出现在s2,就将该字符保存在第三个字符串中,最后将第三个字符串的数据尾部增加...
  • 如果我们删除一个参数时,往往没有数组或者列表那么方便。但是,如果有了下面这个方法,我们同样可以做好。public class Test3 {/*** @param args*/public static void main(String[] args) {//要切割的字符串...
  • 删除字符串中连续的重复字符Constraints: 限制条件: (length of string) < 10000 Example: 例: Sample Input 1: bbccbb Sample Output 1: After removing consecutive duplicates, the answer...
  • 例如,输入”They are students.”和”aeiou”,则删除之后的第一个...思路:不可避免的是遍历第一个字符串,如果遍历一个字符,都需要去第二个字符串中查找其存不存在,那么复杂度会是O(nm),当然由于字符数有限,所以
  • 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("请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,449,170
精华内容 579,668
关键字:

从一个字符串中删除字符