首页 > 其他分享 >字符串的基本操作(C语言版)

字符串的基本操作(C语言版)

时间:2024-11-21 16:18:37浏览次数:3  
标签:子串 ln str2 str1 C语言 len2 公共 字符串 基本操作

字符串的判断、查找字符串并返回查找结果

一、编写函数:

  1. 采用顺序结构存储串,编写一个函数substring(strl,str2),用于判定str2是否为strl的子串;
  2. 编写一个函数,实现在两个已知字符串中找出所有非空最长公共子串的长度和最长公共子串的个数;

二、代码演示:

1、字符串匹配的源代码:

#include <stdio.h>
#include <string.h>
/* 简单模式匹配算法 */
int simple_match( char *t, char *p )
{
    int n, m, i, j, k;
    n = strlen( t );
    m = strlen( p );
    for( j = 0; j < n - m; j++ ) {  /* 顺序考察从t[j]开始的子串 */
        for( i = 0; i < m && t[j+i] == p[i]; i++ );/* 从t[j]开始的子串与字符串p比较 */
        if( i == m )                    /* 匹配成功 */
            return 0;
    }
        return 1;                   /* 匹配失败 */
}

void main()
{
    char *s1[]={ "Abcabc", "Abc123ab", "eeefffg" };
    char *s2[]={ "aBc", "c123", "fge" };
    int i;
    for( i = 0; i < 3; i++ ) {
            printf( "长字符串[%s] 匹配子串[%s] ", s1[i], s2[i] );
        if( simple_match( s1[i], s2[i] ) == 0 )
            printf( "  匹配成功\n" );
        else
            printf( "匹配失败\n" );
        }
}

2、公共字符串的源代码:

#include <stdio.h>
#include<string.h>
int commstr( char *str1, char *str2, int *lenpt )
{
    int len1, len2, ln, count, i, k, p;
    char *st, form[20];
    if( (len1=strlen(str1)) < (len2=strlen(str2)) ) { /* 使str1的长度不小于str2 */
        st = str1;
        str1 = str2;
        str2 = st;
        ln = len1;  
        len1 = len2;
        len2 = ln;
    }
    count = 0;
    for( ln = len2; ln > 0; ln-- ) {    /* 找长为ln的公共子串 */
        for( k = 0; k + ln <= len2; k++ ) {
                    /* 自str2[k]开始的长为ln的子串与str1中的子串比较 */
            for( p = 0; p + ln <= len1; p++ ) {
            /* str1中的子串自str1[p]开始, 两子串比较通过对应字符逐一比较实现 */
                for( i = 0; i < ln && str2[k+i]==str1[p+i]; i++ );
                if( i == ln ) { /* 找到一个最长公共子串 */
                    sprintf( form, "子串%%d[%%%d.%ds]\n", ln, ln );
                    printf( form, ++count, str2+k );
                                }
            }
        }
        if( count )
            break;
    }
        *lenpt = ln;;
        return count;
}

void main()
{
    int c, len;
    c = commstr( "Abc1AbcsAbcd123", "123Abc", &len );
        printf( "共有%d个长为%d的公共子串\n", c, len );
}

三、运行结果:
1.采用顺序结构存储串,编写一个函数substring(strl,str2),用于判定str2是否为strl的子串。设strl=“aoa…am”,str2=“bb…b”,从strl中找与b,匹配的字符 a,若a=b,则判定a+1=b…a+=b,若都相等,则结果是str2是strl的子串,否则继续比较a;之后的字符。
在这里插入图片描述
2.设两个字符串首指针分别为strl和str2,它们的长度分别记为lenl和 len2。不失一般性,设有len1>len2,则它们最长的公共子串长度不会超过len2。程序为找最长的公共子串,考虑找指定长度的所有公共子串的子问题。在指定长度从len2开始逐一递减的寻找过程中,一旦找到了公共子串,程序最先找到的公共字符串就是最长公共子串。输出非空最长公共子串的长度和最长公共子串的个数。
在这里插入图片描述
四、注意:
串是由零个或多个任意字符组成的字符序列。一般记做:s=“a: az… an”;n为串的长度,表示串中所包含的字符个数,当n=0时,称为空串。

标签:子串,ln,str2,str1,C语言,len2,公共,字符串,基本操作
From: https://blog.csdn.net/HelloWorld_4396/article/details/143920029

相关文章

  • 二叉搜索树的基本操作(最全面)
    目录二叉搜索的定义:节点类:查找关键词对应的值:非递归递归:查找最小关键词对应的值:方法一:方法二:查找最大关键词对应的值:方法一:方法二:存贮关键词对应的值:查找关键词的前驱值:查找关键词对应的后继值: 删除节点:非递归:递归:范围1.小于某值的范围2......
  • C语言分支与循环
    引言C语言是结构化的程序设计语言。结构化的程序通常包括数据的描述和操作的描述两方面的内容,结构指的是顺序结构、选择结构、循环结构。算法广义上来讲,算法是解决某一问题的方法和步骤,狭义的算法是对特定问题求解步骤的一种描述。算法的特性和要素:算法的特性有穷性确定......
  • 【C语言】自编码器
    描述一下你对自编码器的理解,包括变分自编码器和生成对抗自编码器等。 自编码器(Autoencoder,AE)是一种无监督学习模型,主要用于数据压缩和特征学习。它的基本思想是通过一个编码器网络将输入数据压缩成低维潜在向量,然后通过一个解码器网络尝试从这个潜在向量重构出原始输入。如......
  • 递归之美:C语言中的函数递归
      在编程的世界中,函数递归是一个强大且优雅的概念,它允许一个函数自我调用以解决问题。这种自我调用的特性使得递归在解决某些问题时变得特别高效和直观。本文将深入探讨函数递归的概念、应用以及需要注意的事项。一、递归是什么?        递归是学习C语⾔函数绕不开......
  • 写一个加密字符串的方法
    /***加密字符串*@param{string}str需要加密的字符串*@param{string}key加密密钥*@returns{string}加密后的字符串*/functionencryptString(str,key){if(!str){return"";}try{//使用CryptoJS库进行AES加密constkeyUt......
  • 写一个方法去掉字符串中的空格
    有多种方法可以去除JavaScript字符串中的空格,以下是几种常见且有效的方法:1.使用trim()方法(去除字符串开头和结尾的空格):这是最常用的方法,它可以去除字符串开头和结尾的空格,但不影响字符串中间的空格。conststr="Hello,world!";consttrimmedStr=str.trim();......
  • 【头歌实训:利用栈判断字符串是否为回文串】
    头歌实训:利用栈判断字符串是否为回文串文章目录任务描述相关知识回文串编程要求测试说明源代码:任务描述本关任务:基于栈stack数据结构判断字符串是否为“回文串”。相关知识为了完成本关任务,你需要掌握:1.如何创建一个栈,2.入栈、出栈操作,3.“回文串”概......
  • c语言中的鞍点问题(详细版)
    1、什么是鞍点什么是鞍点?    鞍点鞍点,就是类似马鞍一样规律的点,即在一个矩阵中是每一行的最大值并且是每一列的最小值。 (无论多大的矩阵,如果存在鞍点,则只有一个,否则不存在鞍点,至于为啥,建议谷歌)2、找出鞍点的思路找出鞍点的思路 需要我们利用枚举数组(ps:不是高深......
  • MySQL REPLACE函数:字符串替换
    语法REPLACE(string_expression,string_pattern,string_replacement)替换字符串,接受3个参数,分别是原字符串,被替代字符串,替代字符串。string_expression为搜索的字符串表达式,可以为字符或二进制数据类型。string_pattern为要查找的子字符串,可以为字符或二进制数据类......
  • 【C语言的奥秘3】C语言中的控制语句第二弹
    一、循环语句1、while循环(1)、while循环的执行流程while循环是当条件成立时进入循环体,当条件不成立则结束,不在进入到循环当中去。值得注意的是,while循环在第一次执行时,会先判断循环条件是否为真。如果条件为真,则进入循环体执行语句;如果条件为假,则跳过循环体,直接执行循环后......