【问题标题】:Find all substrings of a string查找字符串的所有子字符串
【发布时间】:2015-01-21 19:54:59
【问题描述】:

我有一个字符串,我需要在其中进行子字符串操作。我正在尝试实现这样的目标,例如,如果输入字符串是 com,那么输出必须是这样的 -

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

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

【问题讨论】:

  • 你想达到什么目的?目前尚不清楚...您希望将值存储在某处还是什么?您将如何处理子字符串?
  • 更新了我的问题@iharob
  • 您需要两个嵌套循环:一个用于开始,一个用于子字符串长度。而且您需要一种基于开始和长度打印(或不想要)子字符串的方法。
  • 我不想要存储的值。我只想拆分输入字符串,如问题所示。
  • 进行了编辑。很抱歉打错了@iharob

标签: c string printf


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的代码中缺少逗号:

    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

    【讨论】:

      【解决方案3】:
      • 子字符串表示任何连续的字符组。
      • 对于第 n 个字符串 它将生成 (n*(n-1) /2) 个子字符串。
      • 例如字符串 源 = “堆栈” 字符的长度是 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();
                  }
      

      输出:

      S 英石 STA 斯塔克 堆 吨 助教 交战委员会 钉 一种 交流电 确认 C CK 克

      【讨论】:

        【解决方案4】:

        下面是在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 ++;
              }  
         }}
        

        【讨论】:

          猜你喜欢
          • 2013-07-01
          • 2012-10-24
          • 2017-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-04
          • 2013-03-22
          • 2012-09-07
          相关资源
          最近更新 更多