热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

串的应用举例

假设串S1IcomefromBeijing,S2Chongqing,SubAmerica. 利用串的基本操作,如果串的赋值、串的插入、串的删除、串的替换、对上面 
假设串S1 = "I come from Beijing",S2 = "Chongqing" ,Sub = "America". 
利用串的基本操作,如果串的赋值、串的插入、串的删除、串的替换、对上面 
的串进行操作
#include   
#include   
  
#define MAXSIZE 60  
typedef struct  
{  
    char str[MAXSIZE];  
    int length;  
}SeqString;  
  
void StrAssign(SeqString *S,char cstr[]);//串的赋值操作  
int StrEmpty(SeqString S);//判断串是否为空  
int StrLength(SeqString S);//求串的长度操作  
void StrCopy(SeqString *T,SeqString S);//串的复制操作  
int StrCompare(SeqString S,SeqString T);//串的比较操作  
int StrInsert(SeqString *S,int pos,SeqString T);//串的插入操作  
int StrDelete(SeqString *S,int pos,int len);//串的删除操作  
int StrConcat(SeqString *T,SeqString S);//串的连接操作  
int SubString(SeqString *Sub,SeqString S,int poos,int len);//截取子串操作  
int StrReplace(SeqString *S,SeqString T,SeqString V);//串的替换操作  
int StrIndex(SeqString S,int pos,SeqString T);//串的定位操作  
void StrClear(SeqString *S);//清空串操作  
void StrPrint(SeqString S);//串的输出声明  




#include "string.h"  
 
int main(void)  
{  
    SeqString S1,S2,Sub;  
    char ch[MAXSIZE];  
    printf("请输入第一个字符串:\n");  
    gets(ch);  
    StrAssign(&S1,ch);  
    printf("输出串S1:");  
    StrPrint(S1);  
    printf("请输入第二个字符串:\n");  
    gets(ch);  
    StrAssign(&S2,ch);  
    printf("输出串S2:");  
    StrPrint(S2);  
    printf("将串S2插入到S1的第13个位置:\n");  
    StrInsert(&S1,13,S2);  
    StrPrint(S1);  
    printf("将串S1中的第22个位置起的7个字符删除:\n");  
    StrDelete(&S1,22,7);  
    StrPrint(S1);  
    printf("将串S2中的第6个位置起的4个字符取出放进Sub中:\n");  
    SubString(&Sub,S2,6,4);  
    StrPrint(Sub);  
    printf("将串Sub赋值为America:\n");  
    StrAssign(&Sub,"America");  
    printf("将串S1中的串S2用Sub取代:\n");  
    StrReplace(&S1,S2,Sub);  
    StrPrint(S1);  
    return 0;  
}  



#include "string.h"  
  
void StrAssign(SeqString *S,char cstr[])//串的赋值操作(将常量cstr中的字符赋值给串S)  
{  
    int i = 0;  
    for(i = 0;cstr[i]!='\0';i++)  
    {  
        S->str[i] = cstr[i];  
    }  
    S->length = i;  
}  
int StrEmpty(SeqString S)//判断串是否为空  
{  
    if(S.length == 0)  
    {  
        return 1;  
    }  
    else  
    {  
        return 0;  
    }  
}  
int StrLength(SeqString S)//求串的长度操作  
{  
    return S.length ;  
}  
void StrCopy(SeqString *T,SeqString S)//串的复制操作(将串S中的每一个字符赋给T)  
{  
    int i;  
    for(i = 0;i str[i] = S.str[i];  
    }  
    T->length = S.length ;  
}  
int StrCompare(SeqString S,SeqString T)//串的比较操作  
{  
    int i;  
    for(i = 0;i  S->length)  
    {  
        printf("插入位置不正确\n");  
        return 0;  
    }  
    if(S->length + T.length <= MAXSIZE)//子串完整插入到串中  
    {  
        //在插入子串T前,将S中的pos后的字符向后移动len个位置  
        for(i = S->length+T.length-1;i >= pos+T.length-1;i--)  
        {  
            S->str[i] = S->str[i-T.length];  
        }  
        //将串插入到S中  
        for(i = 0;i str[pos+i-1] = T.str[i];  
        }  
        S->length = S->length +T.length ;  
        return 1;  
    }  
    else if(pos +T.length <= MAXSIZE)//子串完全插入S中,但是S中的字符会被截断  
    {  
        for(i = MAXSIZE-1;i > T.length +pos-1;i--)  
        {  
            S->str[i] = S->str[i-T.length];  
        }  
        for(i = 0;i str[i+pos-1] = T.str[i];  
        }  
        S->length = MAXSIZE;  
        return 0;  
    }  
    else//子串T不能完全插入到S中,T将会有字符被舍弃  
    {  
        for(i = 0;i str[i+pos-1] = T.str[i];  
        }  
        S->length = MAXSIZE;  
        return 0;  
    }  
}  
int StrDelete(SeqString *S,int pos,int len)//串的删除操作(在串S中删除pos开始的len个字符,然后将后面的字符向前移动)  
{  
    int i,flag;  
    if(pos <0 || len <0 || pos+len-1 > S->length)  
    {  
        printf("删除位置不正确,参数len不合法\n");  
        flag = 0;  
    }  
    else  
    {  
        for(i = pos+len;i <= S->length-1;i++)  
        {  
            S->str[i-len] = S->str[i];  
        }  
        S->length = S->length -len;//修改串S的长度  
        flag = 1;  
    }  
    return flag;  
}  
int StrConcat(SeqString *T,SeqString S)//串的连接操作(将串S连接在串T的后面)  
{  
    int i,flag;  
    if(T->length +S.length <= MAXSIZE)  
    {  
        for(i = T->length ;i length +S.length ;i++)  
        {  
            T->str[i] = S.str[i-T->length];  
        }  
        T->length = T->length +S.length ;  
        flag = 1;  
    }  
    else if(T->length length ;i str[i] = S.str[i-T->length];  
        }  
        T->length = MAXSIZE;  
        flag = 0;  
    }  
    return flag;  
}  
int SubString(SeqString *Sub,SeqString S,int pos,int len)//截取子串操作(截取串S中从第pos个字符开始,长度为len的连续字符,并赋值给Sub)  
{  
    int i;  
    if(pos <0 || len <0 || pos+len-1 > S.length)  
    {  
        printf("参数pos和len不合法\n");  
        return 0;  
    }  
    else  
    {  
        for(i = 0;i str[i] = S.str[i+pos-1];  
        }  
        Sub->length = len;  
        return 1;  
    }  
}  
int StrIndex(SeqString S,int pos,SeqString T)//串的定位操作(在主串S中的第pos个位置开始查找子串T,如果主串S中存在与串T值相等的子串,返回子串在主串第pos个字符后第一次出现的位置)  
{  
    int i,j;  
    if(StrEmpty(T))  
    {  
        return 0;  
    }  
    i = pos;  
    j = 0;  
    while(i = T.length)//如果在串S中找到串T,则返回子串T在主串S中的位置  
    {  
        return i-j+1;  
    }  
    else  
    {  
        return -1;  
    }  
}  
int StrReplace(SeqString *S,SeqString T,SeqString V)//串的替换操作(如果串S中存在子串T,则用V替换串S中的所有子串T)  
{  
    int flag;  
    int i = 0;  
    if(StrEmpty(T))  
    {  
        return 0;  
    }  
    while(i)  
    {  
        i = StrIndex(*S,i,T);//利用串的定位操作在串S中查找T的位置  
        if(i)  
        {  
            StrDelete(S,i,StrLength(T));//如果找到子串T,则将S中的串T删除  
            flag = StrInsert(S,i,V);//将V插入  
            if(!flag)  
            {  
                return 0;  
            }  
            i += StrLength(V);  
        }  
    }  
    return 1;  
}  
void StrClear(SeqString *S)//清空串操作  
{  
    S->length = 0;  
}  
void StrPrint(SeqString S)//串的输出声明  
{  
    int i;  
    for(i = 0;i 

运行结果:

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

串的应用举例


推荐阅读
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文介绍了一个程序,可以输出1000内能被3整除且个位数为6的所有整数。程序使用了循环和条件判断语句来筛选符合条件的整数,并将其输出。 ... [详细]
author-avatar
飞逝舞_975
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有