-
题目要求:编写算法,求得所有包含在串s中而不包含在串t中的字符(s中重复的字符只选一个)构成的新串r,以及r中每个字符在s中第一次出现位置。
-
关键代码
void str_handler(char *s,char *t,char *r,int *a) { int c[256]={0};//长度与ASCII码值长度一致 int i,j; j=0; for(i=0;s[i]!='\0';++i) { if(c[s[i]]==0 && strchr(t,s[i])==NULL) { c[s[i]]=1; r[j]=s[i]; a[j]=i+1; j++; } } r[j]='\0'; } //C库函数char *strchr(const char *str, int c)在参数str所指向的字符串中搜索第一次出现字符c的位置。 //该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL。
-
完整程序
#include <stdio.h> #include <string.h> #define MAXSIZE 50 void str_handler(char *s,char *t,char *r,int *a) { int c[256]={0}; int i,j; j=0; for(i=0;s[i]!='\0';++i) { if(c[s[i]]==0 && strchr(t,s[i])==NULL) { c[s[i]]=1; r[j]=s[i]; a[j]=i+1; j++; } } r[j]='\0'; } int main() { int i=0; char r[MAXSIZE]; int a[MAXSIZE]={0}; char s[] = "ewqedrfwerfgwrfwrf3243efcsedf1"; char t[] = "r234rfwerf23"; str_handler(s,t,r,a); printf("t=%s\n",r); while(a[i]) printf("%d ", a[i++]); }