21xrx.com
2024-11-22 09:53:54 Friday
登录
文章检索 我的文章 写文章
C 子串,C 中的子串
2021-07-07 09:08:21 深夜i     --     --
C C

C 子字符串程序,用于查找字符串的子字符串及其所有子字符串。 子字符串本身就是一个字符串,它是较长字符串的一部分。 例如,字符串“the”的子串是“”(空字符串)、“t”、“th”、“the”、“h”、“he”和“e”。 头文件“string.h”不包含任何直接查找子串的库函数。

 

C子串程序

#include <stdio.h>
 
int main()
{
   char string[1000], sub[1000];
   int position, length, c = 0;
 
   printf("Input a string\n");
   gets(string);
 
   printf("Enter the position and length of substring\n");
   scanf("%d%d", &position, &length);
 
   while (c < length) {
      sub[c] = string[position+c-1];
      c++;
   }
   sub[c] = '\0';
 
   printf("Required substring is \"%s\"\n", sub); // '\"' to print "
 
   return 0;
}

 

C子串程序输出:

C语言中的子串使用函数

我们创建了一个函数,并向它传递四个参数原始字符串数组、子字符串数组、所需子字符串的位置和长度。 当我们使用按引用调用时,我们不需要返回子字符串数组。 请参阅下面的另一个代码,其中我们返回一个指向子字符串的指针,这是我们在函数中使用动态内存分配创建的。

#include <stdio.h>
 
void substring(char [], char[], int, int);
 
int main()
{
   char string[1000], sub[1000];
   int position, length, c = 0;
 
   printf("Input a string\n");
   gets(string);
 
   printf("Enter the position and length of substring\n");
   scanf("%d%d", &position, &length);
 
   substring(string, sub, position, length);
 
   printf("Required substring is \"%s\"\n", sub);
 
   return 0;
}
// C substring function definition
void substring(char s[], char sub[], int p, int l) {
   int c = 0;
   
   while (c < l) {
      sub[c] = s[p+c-1];
      c++;
   }
   sub[c] = '\0';
}

使用指针的C子串程序

为了找到子字符串,我们创建了一个子字符串函数,它返回一个指向字符串的指针。 字符串地址、所需的子字符串长度和提取子字符串的位置是传递给函数的三个参数。

#include <stdio.h>
#include <stdlib.h>


char* substring(char*, int, int);

int main()
{
   char string[100], *p;
   int position, length;
 
   printf("Input a string\n");
   gets(string);
 
   printf("Enter the position and length of substring\n");
   scanf("%d%d", &position, &length);
 
   p = substring(string, position, length);
 
   printf("Required substring is \"%s\"\n", p);
 
   free(p);
 
   return 0;
}

/*C substring function: It returns a pointer to the substring */


char *substring(char *string, int position, int length)
{
   char *p;
   int c;
 
   p = malloc(length+1);
   
   if (p == NULL)
   {
      printf("Unable to allocate memory.\n");
      exit(1);
   }
 
   for (c = 0; c < length; c++)
   {
      *(p+c) = *(string+position-1);      
      string++;  
   }
 
   *(p+c) = '\0';
 
   return p;
}

C程序查找字符串的所有子字符串

#include <stdio.h>
#include <string.h>
#include <malloc.h>
 
char* substring(char*, int, int);
 
int main()
{
   char string[100], *p;
   int position = 1, length = 1, t, string_length;
 
   printf("Enter a string\n");
   gets(string);
 
   t = string_length = strlen(string);
 
   printf("Substring of \"%s\" are\n", string);
 
   while (position <= string_length)
   {
      while (length <= t)
      {
         p = substring(string, position, length);
         printf("%s\n", p);
         free(p);
         length++;
      }
      t--;
      position++;
      length = 1;
   }
 
   return 0;
}

 

/* Use substring function given in above C program*/

子串程序输出:

字符串的子串数

长度为 n 的字符串有 [n*(n+1)/2 +1] 个子串。 如果字符串中的所有字符都不同,则它们是唯一的。

考虑字符串:a1a2a3................an-1an

长度为 n 的子串个数:1 [(a1a2a3................an-1an)]

长度为 (n-1) 的子串个数:2 [(a1a2a3................an-1), (a2a3............. an-1an)]

长度为(n-2)的子串个数:3 [(a1a2a3................an-2), (a2a3........ an-1), (a3a3................an)]................................长度为 3 的子串个数:( n-3) [(a1a2a3), (a2a3a4), (a3a4a5),................,(an-2an-1an)]

长度为2的子串个数:(n-2) [(a1a2), (a2a3), (a3a4),...........,(an-1an)]

长度为1的子串个数:(n)[(a1),(a2),(a3),........,(an-1),(an)]

长度为 0 的子串数(空串):1 []

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复