status hs_replace(hstring *pstr,hstring s1,hstring s2) { /* 初始条件: 串pstr, s1和s2存在,s1是非空串(此函数与串的存储结构无关) */ /* 操作结果: 用s1替换主串pstr中出现的所有与s1相等的不重叠的子串 */ int i=1; /* 从串S的第一个字符起查找串s1 */ if(hs_empty(s1)) /* s1是空串 */ return ERROR; do { i=hs_find(*pstr,s1,i); /* 结果i为从上一个i之后找到的子串T的位置 */ if(i) /* 串pstr中存在串s1 */ { hs_delete(pstr, i, hs_length(s1)); /* 删除该串s1 */ hs_insert(pstr, i, s2); /* 在原串s1的位置插入串s2 */ i += hs_length(s2); /* 在插入的串s2后面继续查找串s1 */ } } while(i); return OK; }
static void deleteOneDHistCB(Widget w, nTuBrowserInfo *nTuBrDummy, caddr_t call_data) { int i, idPos, *posList, count, id, uid, jn; nTuBrowserInfo *nTuBr; nTuBroHs1D *nTuH1; if (!XmListGetSelectedPos(OneDHistHistoListW, &posList, &count)) { DialogF(DF_WARN, OneDHistShellW, 1, "Please select a Histogram", "Acknowledged"); return; } id = OneDHistListedIDs[((*posList) -1)]; CurrentHistoUID = hs_uid(id); nTuBr = oneDHistNTupleSource(id); if (nTuBr == NULL) { DialogF(DF_ERR, OneDHistShellW, 1, "Internal Error in deleteOneDHist\nPlease report", "Acknowledged"); return; } hs_delete(id); hs_update(); for (i=0; i<nTuBr->sizeOfLists; i++) { if (nTuBr->hsItemList[i] == NULL) continue; if (id == nTuBr->hsItemList[i]->id ) { nTuH1 = (nTuBroHs1D *) nTuBr->hsItemList[i]; if (nTuH1->varIndices != NULL) free(nTuH1->varIndices); free(nTuH1); nTuBr->hsItemList[i] = NULL; break; } } nTuBr->nHistoItems--; nTuBr->nHisto1D--; redisplay1DHistoList(); }