엄 울 민 데이터 구조 연습 문제 C 언어 4.10 ~ 4.13

22623 단어 데이터 구조
오늘 은 많은 일 을 한 후에 머리 가 갑자기 단락 되 었 다. 여러 가지 작은 문 제 를 N 을 오래 찾 았 는데 지금 은 간 이 터 질 것 같다. 누군가가 아 기 를 자칭 하 는 것 을 듣 는 것 보다 더 좋 지 않다.ο°) ~ @ 쓰 러 졌 다.. 더 말 하지 말고 코드 를 올 려 라 ~
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
using namespace std;
#define ok 1
#define error 0
#define true 1
#define false 0
#define overflow -1
//#define stack_init_size 100
//#define stack_increment 10
typedef int status;
#define maxsize 255
typedef char sstring[maxsize + 1];
status sassign(sstring &s, char *ch)
{
        int i = 0;
        char *p = ch;
        while (i < maxsize && *p)
        {
                s[++i] = *p++;
        }
        s[0] = i;
        if (*p)
        {
                return error;
        }
        else
        {
                return ok;
        }
}
void strassign(sstring &T, sstring S)
{
        int i;
        for (i = 0; i <= S[0]; i++)
        {
                T[i] = S[i];
        }
}
void strcpy(sstring &t, sstring s)
{
        int i;
        for (i = 0; i <= s[0]; i++)
        {
                t[i] = s[i];
        }
}
int strcompare(sstring s, sstring t)
{
        int i = 1;
        while (i <= s[0] && i <= t[0] && s[i] == t[i])
        {
                i++;
        }
        if (i <= s[0])
                if (i <= t[0])
                {
                        return s[i] - t[i];
                }
                else
                {
                        return  s[i];
                }
        else if (i <= t[0])
        {
                return -t[i];
        }
        else
        {
                return  0;
        }
}
status concat(sstring &t, sstring s1, sstring s2)
{
        int i, j;
        for (i = 1; i <= s1[0]; i++)
        {
                t[i] = s1[i];
        }
        if (s1[0] + s2[0] <= maxsize)
        {
                for (j = 1; j <= s2[0]; j++)
                {
                        t[i++] = s2[j];
                }
                t[0] = s1[0] + s2[0];
                return ok;
        }
        else
        {
                for (j = 1; j <= maxsize - s1[0]; j++)
                {
                        t[i++] = s2[j];
                }
                t[0] = maxsize;
                return error;
        }
}
status substring(sstring &sub, sstring s, int pos, int len) {
        int i;
        if (pos < 1 || pos > s[0] || len < 0 || len > s[0] - pos + 1)
        {
                return error;
        }
        for (i = 1; i <= len; i++)
        {
                sub[i] = s[pos + i - 1];
        }
        sub[0] = len;
        return ok;
}


void putdata(sstring s)
{
        int i;
        printf("
"
); for (i = 1; i <= s[0]; i++) { printf("%c", s[i]); } } /*4.10*/ void strreverse(sstring &s, sstring r) // r s { int i; sstring a, b, c; strassign(s, ""); for (i = r[0]; i > 0; i--) { substring(a, r, i, 1); strassign(b, a); concat(c, s, b); strassign(s, c); } } /*4.11*/ int ak[maxsize]; int substract(sstring s, sstring t, sstring &r) { int i, j = 1, k = 1,q=1; sstring a, b, d,e; memset(ak, -1, sizeof(a)); sstring c; sassign(a, " "); sassign(b, " "); sassign(c, " "); sassign(d, " "); for (i = 1; i <= s[0]; i++) { substring(c, s, i, 1); substring(a, s, 1, 1); for (j = 1; j < i && strcompare(c, a);) /* s c( ) */ { j++; //printf("%d
"
,j); substring(a, s, j, 1); } if (i == j) { substring(b, t, 1, 1); for (k = 1; k <= t[0] && strcompare(c, b);) /* t */ { k++; substring(b, t, k, 1); } if (k > t[0]) { concat(d, r, c); strassign(r, d); //putdata(r); ak[q++]=j; } } } //printf("%d",ak[q-1]); q--; return q; } /*4.12*/ int Replace(sstring &s, sstring t, sstring v) { int n, i; sstring head, tail, a, b; sassign(b, ""); sassign(a, ""); sassign(head, ""); sassign(tail, ""); for (n = 0, i = 1; i <= s[0] - t[0] + 1; i++) { substring(a, s, i, t[0]); if (!strcompare(a, t)) { substring(head, s, 1, i - 1); substring(tail, s, i + t[0], s[0] - t[0] - i + 1); concat(b, head, v); concat(s, b, tail); i += v[0]; n++; } } return n; } /*4.13*/ int Delete(sstring &s, sstring t) { int n, i; sstring head, tail, a, b; sassign(b, ""); sassign(a, ""); sassign(head, ""); sassign(tail, ""); for (n = 0, i = 1; i <= s[0] - t[0] + 1; i++) { substring(a, s, i, t[0]); if (!strcompare(a, t)) { substring(head, s, 1, i - 1); substring(tail, s, i + t[0], s[0] - t[0] - i + 1); concat(s, head, tail); n++; } } return n; } int main() { int o,p,q,i; printf("**********************************************
"
); sstring r, s, v, k; sstring a, b, c; printf("4.10
"
); sassign(r, "I am a ACMer"); printf(" :"); putdata(r); strreverse(s, r); printf("
:"
); putdata(s); printf("
**********************************************
"
); printf("4.11
"
); sassign(k, "I am a ACMer"); printf(" 1:"); putdata(k); printf("
2:"
); sassign(v, "ACMer"); putdata(v); sassign(c, ""); printf(" 1 2 :"); o=substract(k, v, c); putdata(c); printf("
:
"
); for(i=1;i<=o;i++) { printf("%d ",ak[i]); } printf("
**********************************************
"
); printf("4.12
"
); printf(" :"); putdata(r); printf("
“ACMer” “bird”"
); sassign(a, "ACMer"); sassign(b, "bird"); printf("
:"
); Replace(r, a, b); putdata(r); printf("
**********************************************
"
); printf("4.13
"
); sassign(r, "I am a ACMer"); printf(" :"); putdata(r); printf("
“ACMer” "
); sassign(a, "ACMer"); printf("
:"
); Delete(r, a); putdata(r); printf("
**********************************************
"
); return 0; }

좋은 웹페이지 즐겨찾기