查找字符串的所有子字符串
Find all substrings of a string
我有一个字符串需要做子串操作。我正在尝试实现这样的事情,例如,如果输入字符串是 com
那么输出必须是这样的 -
c
co
com
o
om
m
..我已经试过了
for(int i=0 ; i<len ;i++)
{
printf("%s",&string[strlen(string)-i]));
}
您的代码中缺少一个逗号:
for(int i=0 ; i<len ;i++)
{
printf("%s", &string[strlen(string)-i])
}
但这将打印“”,"m","om" - 不是您想要的。
更像是:
// start at each point in the string
for ( const char *start = string; *start; ++start )
{
// for each starting point, go from the whole remainder down
// to just one character
for ( const char *end = string + strlen(string); end > start; --end )
{
for ( const char *s = start; s < end; ++s )
putchar(*s);
putchar('\n');
}
}
一个子字符串是由它的左右两端定义的,所以在一个长度为n
的字符串中有O(n*n)
个子字符串。
int n = strlen(string);
for(int i = 0; i < n; i++)
{ for(int j = i; j < n; j++)
{ /* print substring from i to j */
for(int k = i; k <= j; k++)
{ printf("%c", string[k]);
}
printf("\n");
}
}
- 子字符串表示任何连续的字符组。
- 对于第n个字符串
它将生成 (n*(n-1) /2) 个子字符串。
- 例如字符串
来源 = "STACK"
字符的长度是 5,所以它的总子串是 (5(5-1) /2) = 10
我们必须遍历字符串的第一个元素并打印所有子字符串,然后逐个递增 i 的索引并打印范围 (j 到 k) 的子字符串
public void generateSubString(String source){
char[] arr = source.toCharArray();
for(int i = 0; i<arr.length; i++){
for(int j = i ; j < arr.length; j++){
for(int k = i; k<=j; k++){
System.out.print(arr[k]);
}
System.out.println();
}
输出:
小号
英石
STA
STAC
堆
吨
助教
交战委员会
钉
一种
空调
确认
C
CK
K
下面是在javascript中查找一个字符串的所有子串的代码,不用for循环,这样会提高代码速度。
const devideSubStr = (str) => {
var totalLoop = str.length * ((str.length + 1)/2);
// looping count
let i = 0;
var totalChar = 1;//character to get
var charFrom = 0;// from which index
var strLength = str.length;//length of digit
while( i < totalLoop){
console.log(str.substr(charFrom, totalChar))
charFrom ++;
i ++;
if(charFrom == strLength){
charFrom = 0;
strLength = strLength - 1;
totalChar ++;
}
}}
我有一个字符串需要做子串操作。我正在尝试实现这样的事情,例如,如果输入字符串是 com
那么输出必须是这样的 -
c
co
com
o
om
m
..我已经试过了
for(int i=0 ; i<len ;i++)
{
printf("%s",&string[strlen(string)-i]));
}
您的代码中缺少一个逗号:
for(int i=0 ; i<len ;i++)
{
printf("%s", &string[strlen(string)-i])
}
但这将打印“”,"m","om" - 不是您想要的。
更像是:
// start at each point in the string
for ( const char *start = string; *start; ++start )
{
// for each starting point, go from the whole remainder down
// to just one character
for ( const char *end = string + strlen(string); end > start; --end )
{
for ( const char *s = start; s < end; ++s )
putchar(*s);
putchar('\n');
}
}
一个子字符串是由它的左右两端定义的,所以在一个长度为n
的字符串中有O(n*n)
个子字符串。
int n = strlen(string);
for(int i = 0; i < n; i++)
{ for(int j = i; j < n; j++)
{ /* print substring from i to j */
for(int k = i; k <= j; k++)
{ printf("%c", string[k]);
}
printf("\n");
}
}
- 子字符串表示任何连续的字符组。
- 对于第n个字符串 它将生成 (n*(n-1) /2) 个子字符串。
- 例如字符串 来源 = "STACK" 字符的长度是 5,所以它的总子串是 (5(5-1) /2) = 10
我们必须遍历字符串的第一个元素并打印所有子字符串,然后逐个递增 i 的索引并打印范围 (j 到 k) 的子字符串
public void generateSubString(String source){
char[] arr = source.toCharArray();
for(int i = 0; i<arr.length; i++){
for(int j = i ; j < arr.length; j++){
for(int k = i; k<=j; k++){
System.out.print(arr[k]);
}
System.out.println();
}
输出:
小号 英石 STA STAC 堆 吨 助教 交战委员会 钉 一种 空调 确认 C CK K
下面是在javascript中查找一个字符串的所有子串的代码,不用for循环,这样会提高代码速度。
const devideSubStr = (str) => {
var totalLoop = str.length * ((str.length + 1)/2);
// looping count
let i = 0;
var totalChar = 1;//character to get
var charFrom = 0;// from which index
var strLength = str.length;//length of digit
while( i < totalLoop){
console.log(str.substr(charFrom, totalChar))
charFrom ++;
i ++;
if(charFrom == strLength){
charFrom = 0;
strLength = strLength - 1;
totalChar ++;
}
}}