代码如下:

#include <stdio.h> #include <string.h>

#define MAXLEN 100

typedef struct { char str[MAXLEN + 1]; int len; } SString;

void StrAssign(SString *s, char *chars); void StrCopy(SString *s, SString t); int StrLength(SString s); int StrCompare(SString s, SString t); void StrConcat(SString *s, SString t); void SubString(SString *sub, SString s, int pos, int len); void StrDelete(SString *s, int pos, int len); void StrReplace(SString *s, SString t, int pos); int Index(SString s, SString t);

int main() { SString s, t, sub; char chars[MAXLEN + 1]; int choice, pos, len, index;

while (1) {
    printf("\n1:串赋值\n2:求串长\n3:串比较\n4:串连接\n5:求子串\n6:子串插入\n7:子串置换\n8:子串定位\n9:退出\n");
    printf("请输入菜单选项:");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            printf("请输入要赋值的字符串:");
            scanf("%s", chars);
            StrAssign(&s, chars);
            printf("赋值成功!\n");
            break;
        case 2:
            printf("串的长度为:%d\n", StrLength(s));
            break;
        case 3:
            printf("请输入要比较的字符串:");
            scanf("%s", chars);
            StrAssign(&t, chars);
            if (StrCompare(s, t) < 0) {
                printf("字符串 s 小于字符串 t\n");
            } else if (StrCompare(s, t) > 0) {
                printf("字符串 s 大于字符串 t\n");
            } else {
                printf("字符串 s 等于字符串 t\n");
            }
            break;
        case 4:
            printf("请输入要连接的字符串:");
            scanf("%s", chars);
            StrAssign(&t, chars);
            StrConcat(&s, t);
            printf("连接成功,结果为:%s\n", s.str);
            break;
        case 5:
            printf("请输入子串的起始位置和长度:");
            scanf("%d %d", &pos, &len);
            SubString(&sub, s, pos, len);
            printf("子串为:%s\n", sub.str);
            break;
        case 6:
            printf("请输入要插入的子串及其起始位置:");
            scanf("%s %d", chars, &pos);
            StrAssign(&t, chars);
            StrInsert(&s, t, pos);
            printf("插入成功,结果为:%s\n", s.str);
            break;
        case 7:
            printf("请输入要替换的子串及其起始位置:");
            scanf("%s %d", chars, &pos);
            StrAssign(&t, chars);
            StrReplace(&s, t, pos);
            printf("替换成功,结果为:%s\n", s.str);
            break;
        case 8:
            printf("请输入要查找的子串:");
            scanf("%s", chars);
            StrAssign(&t, chars);
            index = Index(s, t);
            if (index == -1) {
                printf("未找到子串!\n");
            } else {
                printf("子串在字符串 s 中的位置为:%d\n", index);
            }
            break;
        case 9:
            return 0;
        default:
            printf("无效的选项!\n");
            break;
    }
}

return 0;

}

void StrAssign(SString *s, char *chars) { int len = strlen(chars); if (len > MAXLEN) { len = MAXLEN; } strncpy(s->str, chars, len); s->len = len; }

void StrCopy(SString *s, SString t) { strncpy(s->str, t.str, t.len); s->len = t.len; }

int StrLength(SString s) { return s.len; }

int StrCompare(SString s, SString t) { int i; for (i = 0; i < s.len && i < t.len; i++) { if (s.str[i] != t.str[i]) { return s.str[i] - t.str[i]; } } return s.len - t.len; }

void StrConcat(SString *s, SString t) { int len = s->len + t.len; if (len > MAXLEN) { len = MAXLEN; } strncat(s->str, t.str, len - s->len); s->len = len; }

void SubString(SString *sub, SString s, int pos, int len) { if (pos < 1 || pos > s.len || len < 0 || pos + len - 1 > s.len) { sub->len = 0; } else { strncpy(sub->str, s.str + pos - 1, len); sub->len = len; } }

void StrDelete(SString *s, int pos, int len) { if (pos < 1 || pos > s->len || len < 0 || pos + len - 1 > s->len) { return; } strncpy(s->str + pos - 1, s->str + pos + len - 1, s->len - pos - len + 1); s->len -= len; }

void StrReplace(SString *s, SString t, int pos) { if (pos < 1 || pos > s->len || t.len == 0 || pos + t.len - 1 > s->len) { return; } strncpy(s->str + pos - 1, t.str, t.len); StrDelete(s, pos + t.len, s->len - pos - t.len + 1); StrInsert(s, t, pos + t.len); }

int Index(SString s, SString t) { int i = 1, j = 1, k; while (i <= s.len - t.len + 1 && j <= t.len) { if (s.str[i - 1] == t.str[j - 1]) { i++; j++; } else { i = i - j + 2; j = 1; } } if (j > t.len) { return i - t.len; } else { return -1; } }

使用c语言编写顺序串的所有功能包括串赋值、串比较、串连接、求串长、求子串、串删除、串置换、子串查找定位等。采用菜单调用的方式实现。 菜单: 1:串赋值 2:求串长 3:串比较 4:串连接 5:求子串 6:子串插入 7:

原文地址: https://www.cveoy.top/t/topic/bstb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录