顺序表实现字符串类型及其基本操作

C语言
使用顺序表实现的字符串类型,以及字符串的基本操作。
如字符串赋值,字符串之间的复制,字符串比较是否相同,字符串的拼接以及字符串的打印。
StringOperation.h

#ifndef STRINGOPERATION_H_INCLUDED
#define STRINGOPERATION_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 88
//串类型定义
typedef struct
{
    char data[MAXSIZE];
    int Length;
}String;
//串初始化
void InitString(String* s);
//字符串判空
int IsEmpty(String* s);
//字符串赋值
int StrAssign(String* s,char str[]);
//字符串间复制
int Strcpy(String* str1,String* str2);
//字符串比较
int Strcmp(String* str1,String* str2);
//输出字符串
int DispStr(String* s);
//字符串连接
int Concat(String* str1,String* str2,String* str3);
//操作函数
int Operation(String* str1,String* str2,String* str3);
#endif // STRINGOPERATION_H_INCLUDED

StringOperation.c

#include <stdio.h>
#include <stdlib.h>
#include "StringOperation.h"
//串初始化
void InitString(String* s)
{
    s->Length = 0;
}
//字符串判空
int IsEmpty(String* s)
{
    return (s->Length == 0);
}
//字符串赋值
int StrAssign(String* s,char str[])
{
    int i;
    if(s->Length == MAXSIZE)
        return 0;   //判满
    for(i = 0;str[i] != '\0'; i++)
        s->data[i] = str[i];
    s->Length = i;
    return 1;
}
//字符串间复制
int Strcpy(String* str1,String* str2)
{
    int i;
    str1->Length = str2->Length;
    for(i = 0;i < str2->Length; i++)
        str1->data[i] = str2->data[i];
    return 0;
}
//字符串比较
int Strcmp(String* str1,String* str2)
{
    int i;
    if(str1->Length != str2->Length)
        return 0;
    for(i = 0;i < str1->Length; i++)
        if(str1->data[i] != str2->data[i])
            break;
    if(i == str1->Length)
        return 1;
    return 0;
}
//输出字符串
int DispStr(String* s)
{
    int i;
    if(!IsEmpty(s))
        for(i = 0;i < s->Length; i++)
            printf("%c",s->data[i]);
    printf("\n\n");
    return 0;
}
//字符串连接
int Concat(String* str1,String* str2,String* str3)
{
    int i;
    Strcpy(str3,str1);
    str3->Length += str2->Length;
     for(i = 0;i < str2->Length; i++)
        str3->data[i + str1->Length] = str2->data[i];
    return 0;
}
//操作函数
int Operation(String* str1,String* str2,String* str3)
{
    char str[MAXSIZE];
    printf("请输入字符数组str:\n");
    scanf("%s",str);
    StrAssign(str2,str);
    Strcpy(str1,str2);
    printf("str1:\n");
    DispStr(str1);
    printf("str2:\n");
    DispStr(str2);
    if(Strcmp(str1,str2))
        printf("\nstr1和str2相同\n");
    else
        printf("\nstr1和str2不相同\n");
    Concat(str1,str2,str3);
    printf("\nstr3:\n");
    DispStr(str3);
    if(Strcmp(str1,str3))
        printf("\nstr1和str3相同\n");
    else
        printf("\nstr1和str3不相同\n");
    if(Strcmp(str2,str3))
        printf("\nstr2和str3相同\n");
    else
        printf("\nstr2和str3不相同\n");
    return 0;
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include "StringOperation.h"
#include "StringOperation.c"
int main()
{
    String str1,str2,str3;
    InitString(&str1);
    InitString(&str2);
    InitString(&str3);
    Operation(&str1,&str2,&str3);
    return 0;
}

上一篇:字符串操作


下一篇:Java String类型的equals和“==”总结