顺序串基本运算

来源:互联网 发布:radon变换算法 编辑:程序博客网 时间:2024/05/20 08:23
//顺序串基本运算#include <stdio.h>#define MAXSIZE 50int StrLength(char *s);           //求串长int StrCat(char s1[], char s2[]); //串连接int SubStr(char *s, char t[], int i, int len);  //求子串int StrCmp(char *s1, char *s2);   //串比较int StrInsert(char *s, int i, char *t);         //串插入int main(){char x1[50] = "abcdefghijk", x2[30] = "mnopqrstuvwxyz", x3[20];puts(x1);              //输出串1printf("Length of string x1 is %d\n", StrLength(x1));    //输出串 x1 的长度//求两个串的连接if (StrCat(x1, x2)){printf("Output x1 after chain:\n");                  //输出连接后的串 x1puts(x1);}else{printf("Chain x1 and x2 fail!\n");}//求一个串的子串if (SubStr(x1, x3, 5, 12))                               //对x1 求字串并存放到串x3 中{printf("String:\n");puts(x3);                                            //输出存放在x3 中的子串}else{printf("Sub Sting get error!\n");}//字符串比较函数if (StrCmp(x1, x2) > 0)                                {printf("x1 is larger!\n");}else{if (StrCmp(x1, x2) == 0){printf("Equal!\n");}else{printf("x2 is larger!\n");}}//将字符串插入到串x2 中if (StrInsert(x2, 5, "aaaaa")){printf("Output x2 after insert!\n");puts(x2);}else{printf("Insert fail!\n");}return 0;}int StrLength(char *s){int i = 0;while (s[i] != '\0'){i++;}return i;}int StrCat(char s1[], char s2[]){int i, j, Len1, Len2;Len1 = StrLength(s1);Len2 = StrLength(s2);if (Len1 + Len2 > MAXSIZE - 1){printf("串长不够,连接失败!\n");return 0;}i = 0;j = 0;while (s1[i] != '\0'){i++;}while (s2[j] != '\0'){s1[i] = s2[j];i++;j++;}s1[i] = '\0';                  //置串结束标志return 1;}int SubStr(char *s, char t[], int i, int len){int j, Slen;Slen = StrLength(s);if (i > len || i < 1 || len > Slen - i + 1 || len < 0)  //len 是子串的长度{printf("给定参数有错!\n");return 0;}for (j = 0; j < len; j++){t[j] = s[i+j-1];            //从第i-1 个位置开始}t[j] = '\0';                    //给子串t 置结束标志return 1;}int StrCmp(char *s1, char *s2){int i = 0;while (s1[i] == s2[i] && s1[i] != '\0'){i++;}return (s1[i] - s2[i]);        //返回值可以大于、小于或等于0}int StrInsert(char *s, int i, char *t){   //将串t 插入到串s 的第i 个字符位置上,指针s 和t 指向存储字符串的字符数组char str[MAXSIZE];int j, k, len1, len2;len1 = StrLength(s);len2 = StrLength(t);if (i < 0 || i > len1 + 1 || len1 + len2 > MAXSIZE - 1){printf("参数不正确或主串s 的数组空间插不下子串t.\n");return 0;}k = i;for (j = 0; s[k] != '\0'; j++) {str[j] = s[k++];      //第一步:将串s 要插入位置i 之后的子串 先保存下}str[j] = '\0';j = 0;while (t[j] != '\0'){s[i] = t[j];          //第二步:把串t 插入到主串s 的位置i处i++;j++;}j = 0;while (str[j] != '\0'){s[i] = str[j];      //第三步:把原来主串i 之后的那个子串,重新接回主串i++;j++;}s[i] = '\0';              //置串s 结束标志return 1;}

原创粉丝点击