查找字符串的所有子字符串

时间:2015-01-21 19:54:59

标签: c string printf

我有一个字符串,我需要进行子字符串操作。我试图实现这样的事情,例如,如果输入字符串是com,那么输出必须是这样的 -

c co com o  om  m ..我试过这个

for(int i=0 ; i<len ;i++)
{
    printf("%s",&string[strlen(string)-i]));
}

4 个答案:

答案 0 :(得分:4)

子字符串由其左端和右端定义,因此长度为O(n*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");
    }
}

答案 1 :(得分:0)

您的代码中缺少逗号:

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');   
  }
}

示例:https://ideone.com/XXoYv6

答案 2 :(得分:0)

  • 子字符串表示任何连续的字符组。
  • 对于n字符串 它将生成(n *(n-1)/ 2)个子字符串。
  • 例如String 来源=“堆栈” 字符的长度为5,因此子字符串总数为(5(5-1)/ 2)= 10

我们必须遍历string的第一个元素并打印所有子字符串,然后逐个递增,我们增加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();
            }

输出:

S ST STA 科技咨询委员会 堆 Ť TA 交谘会 钉 一种 交流电 确认 C CK K

答案 3 :(得分:-1)

下面是在没有for循环的情况下查找javascript中字符串的所有子字符串的代码,这将提高代码速度。

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 ++;
      }  
 }}