shell中取字符串子串的几种方式

shell中取字符串子串的几种方式,第1张

shell中截取字符串的方法有很多中,

${expression}一共有9种使用方法。

${parameter:-word}

${parameter:=word}

${parameter:word}

${parameter:+word}

上面4种可以用来进行缺省值的替换。

${#parameter}

上面这种可以获得字符串的长度。

${parameter%word} 最小限度从后面截取word

${parameter%%word} 最大限度从后面截取word

${parameter#word} 最小限度从前面截取word

${parameter##word} 最大限度从前面截取word

上面4个就是用来截取字符串的方法了。

有了着四种用法就不必使用cut命令来截取字符串了

第一种又可以分为四种情况,下面一一介绍。

1、使用 # 号 *** 作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#substr,例如:

str='>

abaabcac

前两个固定01,

第三个a前面是'ab',从左起最大子串'a'不等于从右起起最大子串'b',所以为0+1=1

第四个a前面是'aba',从左起最大子串'ab'不等于从右起起最大子串'ba',继续往下找'a'='a',所以1+1=2

第五个b前面是'abaa',,'aba'不等于'baa','ab'不等于'aa','a'='a',所以1+1=2

第六个c前面是'abaab','abaa'不等于'baab','aba'不等于'aab','ab'='ab',所以1+2=3

依次类推,next='01122312'

ababaaab

按上述求得next='01123422',给序列上标号

第一位next=0,所以第一位的nextval=0

第二位next=1,所以第二位b与第一位a比较,a不等于b,所以第二位的nextval=next=1

第三位next=1,所以第三位a与第一位a比较,a等于a,所以第三位的nextval=第一位的next=0

依次类推

但是注意,第五位next=3,所以第五位a与第三位a比较,a等于a,但是按照上面算第三位的时候,求得第三位和第一位相等,所以第五位的nextval=第一位的next=0

例如:aaaab

public class StringTest4 {

/

@param args

/

public static void main(String[] args) {

/

需求4:两个字符串的最大相同子串。

"sadfcctvghjkl"

"zxcctvcv"

思路:

1,以短的字符串为主。

到长的字符串中去判断是否存在,如果存在,已找到。

2,如果没有找到。将短的字符串的长度递减获取子串继续到长的串中查找。只要找到就结束。

3,没有找到,说明没有相同的。

/

String s1 = "sadfcctvghjkl";

String s2 = "zxcctvcv";

String maxSub = getMaxSubString(s2,s1);

Systemoutprintln("maxsub="+maxSub+" length="+maxSublength());

}

public static String getMaxSubString(String s1, String s2) {

//确定哪个是长的哪个是短的。

String longStr,shortStr;

longStr = s1length()>s2length()s1:s2;

shortStr = s1equals(longStr)s2:s1;

// Systemoutprintln("long:"+longStr);

// Systemoutprintln("short:"+shortStr);

//对短的字符串 *** 作,从短串中取子串,到长字符串中判断,是否存在。

for(int x=0; x<shortStrlength(); x++){

for(int y=0,z=shortStrlength()-x; z<=shortStrlength(); y++,z++){

//根据y,z,获取子串。

String temp = shortStrsubstring(y,z);

// Systemoutprintln(temp);

if(longStrcontains(temp))

return temp;

}

}

return null;

}

}

string str;

cin >> str;  //输入字符串

string::size_type len = strsize(); //获取长度

int n = 5;

string sub_left = strsubstr(0, n);  //从左边获取n长度子串

string sub_right = strsubstr(n);    //从右边获取n长度子串

string sub = strsubstr(2, 5);   //指定开始位置和长度,获取子串

string::size_type pos = strfind('a', 0);   //判断字符a是否在字符串中,返回位置

reverse(strbegin(), strend());   //字符串反转

transform(strbegin(), strend(), strbegin(), ::toupper); //转换为大写

以上就是关于shell中取字符串子串的几种方式全部的内容,包括:shell中取字符串子串的几种方式、动态规划(最大乘积连续子串和最大和连续子串)、数据结构模式匹配的题,求解!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9383896.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存