Files
Data-Structure/VisualC++/ExerciseBook/04.19/04.19.c
T
2019-11-12 23:47:30 +08:00

78 lines
1.6 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include "SString.h" //**▲04 串**//
/*
* R=S-S∩T,数组a存储R中每个字符在S中第一次出现的位置
*
* 注:数组a的0号单元存储的是a中元素的个数
*/
void Algo_4_19(SString R, SString S, SString T, int** a);
int main(int argc, char* argv[]) {
char* s = "amdhcjgfdlpinbefcopgkqikeb";
char* t = "mhjlpinopkqik";
int* a;
SString T, S, R;
int i;
printf("初始化S和T...\n");
StrAssign(S, s);
StrAssign(T, t);
printf("S = ");
StrPrint(S);
printf("T = ");
StrPrint(T);
Algo_4_19(R, S, T, &a);
printf("R = ");
StrPrint(R);
printf("a = ");
for(i = 1; i <= a[0]; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
/*
* R=S-S∩T,数组a存储R中每个字符在S中第一次出现的位置
*
* 注:数组a的0号单元存储的是a中元素的个数
*/
void Algo_4_19(SString R, SString S, SString T, int** a) {
int i, p;
SString ch;
*a = (int*) malloc((StrLength(S) + 1) * sizeof(int));
StrAssign(R, "");
for(i = 1, (*a)[0] = 0; i <= StrLength(S); i++) {
// 取出字符进行判断
SubString(ch, S, i, 1);
// 获取S[i]在T中的位置
p = Index_2(T, ch, 1);
// 如果S[i]不在T中
if(p == 0) {
// 获取S[i]在R中的位置
p = Index_2(R, ch, 1);
}
// 如果S[i]既不在T中,又没在R中出现过
if(p == 0) {
(*a)[0]++;
(*a)[(*a)[0]] = i;
// 向R中添加S[i]
StrInsert(R, (*a)[0], ch);
}
}
}