串的置换 *** 作 用串v置换出 串s中与t相同的所有非空串
#include//获取串长度 int get_stringSize(char *p); //打印 void print_string(char *p); // 串的置换 *** 作 用串v置换出 串s中与t相同的所有非空串 void replace(char s[],char t[],char v[]) { int len_v = get_stringSize(v); int len_t = get_stringSize(t); int len_s = get_stringSize(s); if(len_s < len_t || len_v == 0 || len_t == 0 || len_s == 0)//串不能为空,且子串 不能比主串长 { printf("替换失败,串不符合规定!!!n"); return; } int i = 0,j = 0; for(i = 0;s[i] != '';i ++) { for(j = 0;t[j] != '';j ++) { if(s[i + j] == t[j]) { continue; } break; } //比对找到了一个 if(t[j] == '') { //如果要替换的串t 长度大于 替换串v if(len_t >= len_v) { //先替换 再腾位置 //替换 for(int k = 0;k < len_v;k ++) { s[i + k] = v[k]; } //因为 替换后仍有 无效数据,后面数据向前靠拢 int sub = len_t - len_v;//向前靠拢空间为 sub for(int k = i + len_v;k < len_s;k ++) { s[k] = s[k + sub]; }//最后sub位 元素 会被自己赋值为空,省了赋空操作 } else//len_t < len_v要替换的串t 长度小于 替换串v { //先腾位置 再替换 //向后 腾位置 int sub = len_v - len_t; for(int k = len_s - 1;k >= i + len_t;k --) { s[k + sub] = s[k]; } //位置腾出,开始替换 for(int k = 0;k < len_v;k ++) { s[i + k] = v[k]; } } //原s 串 的长度 发生了 变化,更新s串长度 len_s = get_stringSize(s); } else;//没有找到 break结束 } return; } int main() { char s[50] = {'a','b','c','d','a','b','c','a','b'};//初始化一个串,需要修改定义成字符数组 char *t = "bcd";//只需要查找,不修改定义成字符串指针 char *v = "BCD";//只需要查找,不修改定义成字符串指针 //串的转置 replace(s,t,v); print_string(s); return 0; } //获取串长度 int get_stringSize(char *p) { int i = 0; while(*(p + i) != ''){i ++;} return i; } void print_string(char *p) { for(int i = 0;*(p + i) != '';i ++) { printf("%c ",*(p + i)); } printf("n"); return; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)