题解 | #单词替换#
单词替换
https://www.nowcoder.com/practice/5b58a04679d5419caf62c2b238e5c9c7
#include <stdio.h> //求字符串长度: int Length(char a[]) { int n = 0; for (int i = 0; a[i] != '\0'; i++) { n++; } return n; } int main() { char a[200] = ""; char b[100] = ""; char c[100] = ""; while (gets(a)) { gets(b); gets(c); int len1 = Length(a); int len2 = Length(b); int len3 = Length(c); for (int i = 0; i < len1; i++) { len1 = Length(a); if (i == 0) {//由于开始没有空格,所以第一组词单独计算 int j = 0, k = 0; while (a[k] == b[j] && j < len2) { k++; j++; }//第一组词前几个字与待替换词相同 if (j == len2&&a[k]==' ') {//第一组词与待替换词完全相同 if (len2 == len3) {//长度相同,直接替换 for (int m = i, l = 0; l < len3; m++, l++) { a[m] = c[l]; } } else if (len2 > len3) {//待替换词长度大,直接将被替换词替换,计算两词相差长度number,将后续字符串向前移动number个距离 int m, l; int number = len2 - len3; for (m = i, l = 0; l < len3; m++, l++) { a[m] = c[l]; } while (a[m] != '\0') { a[m] = a[m + number]; m++; } } else if (len2 < len3) {//被替换词长度大,将被替换词单独放进一个数组d,并将待替换词之后的字符串也移入d,再将d复制进a,打印数组a即可 char d[100] = ""; int q = 0; for (int p = 0; p < len3; p++) { d[q++] = c[p]; } for (int w = len2; w < len1; w++) { d[q++] = a[w]; } int x = 0; int len4 = Length(d); for (int x = 0, y = 0; x < len4; x++, y++) { a[x] = d[y]; } } } } else if (a[i] == ' ') {//以空格为标识符,判断后续字符串 int j = 0, k = i + 1; while (a[k] == b[j] && j < len2) {//该词组前几个字与待替换词相同 k++; j++; } if (j == len2 && (a[k] == ' ' || k==len1)) {//该词组与待替换词完全相同,由于最后一组词后没有空格,所以用k=len1判断最后一组词 if (len2 == len3) {//长度相同,直接替换 for (int m = i + 1, l = 0; l < len3; m++, l++) { a[m] = c[l]; } } else if (len2 > len3) {//待替换词长度大,该词之前字符不做修改,直接将被替换词替换,计算两词相差长度number,将后续字符串向前移动number个距离 int m, l; int number = len2 - len3; for (m = i + 1, l = 0; l < len3; m++, l++) { a[m] = c[l]; } while (a[m] != '\0') { a[m] = a[m + number]; m++; } } else if (len2 < len3) {//被替换词长度大,将待替换词之前的字符转移进数组d,被替换词依次进入数组d,并将待替换词之后的字符串也移入d,再将d复制进a,打印数组a即可 char d[100] = ""; int q = 0; k = 0; while (q <= i) { d[q++] = a[k++]; } for (int p = 0; p < len3; p++) { d[q] = c[p]; q++; } for (int w = k + len2; w <= len1; w++) { d[q] = a[w]; q++; } int x = 0; int len4 = Length(d); for (int x = 0, y = 0; y < len4; x++, y++) { a[x] = d[y]; } } } } } printf("%s", a); } return 0; }