void removeNumArr(char *p) {
int firstNumIndex = 0, endNumIndex = 0, lengthOfNum = 0, i = 0, lastSumChar = 0;
char *temp = p;//使temp指向首地址
while (*temp != '\0') {
if (*temp >= '0' && *temp <= '9') {
endNumIndex = i;//5(3) 计算最后的数字下标endNumIndex
lengthOfNum++;//3 数字总个数lengthOfNum
firstNumIndex = endNumIndex - lengthOfNum + 1;//3(1) 第一个数字下标firstNumIndex
}
i++;//最后i = 10
temp++;
lastSumChar = i - endNumIndex - 1;//数字之后的字母总个数
}
temp = p;//使temp重新指向首地址
i = 0;
while (i <= endNumIndex) {
if (*temp >= '0' && *temp <= '9') {
*temp = *(temp + lengthOfNum);
}
i++;
temp++;
}
//若数字个数 = 数字之后的字母个数(正好拷完, 但是有两遍,(如vaerclyrcly), 需要下面的代码处理); 若数字个数 < 数字之后的字母个数(如vae123rcly --> vaerclrcly, y没有拷贝进去 需要下面的代码处理); 若数字个数 > 数字之后的字母个数(例如:vae12345rcly 将最后的\0拷贝进去,此时不用处理,即不走下面的代码)
if (lengthOfNum <= lastSumChar) {
i = 0;
while (i < (lastSumChar - lengthOfNum)) {
*temp = *(temp + lengthOfNum);
temp++;
i++;
}
}
int firstNumIndex = 0, endNumIndex = 0, lengthOfNum = 0, i = 0, lastSumChar = 0;
char *temp = p;//使temp指向首地址
while (*temp != '\0') {
if (*temp >= '0' && *temp <= '9') {
endNumIndex = i;//5(3) 计算最后的数字下标endNumIndex
lengthOfNum++;//3 数字总个数lengthOfNum
firstNumIndex = endNumIndex - lengthOfNum + 1;//3(1) 第一个数字下标firstNumIndex
}
i++;//最后i = 10
temp++;
lastSumChar = i - endNumIndex - 1;//数字之后的字母总个数
}
temp = p;//使temp重新指向首地址
i = 0;
while (i <= endNumIndex) {
if (*temp >= '0' && *temp <= '9') {
*temp = *(temp + lengthOfNum);
}
i++;
temp++;
}
//若数字个数 = 数字之后的字母个数(正好拷完, 但是有两遍,(如vaerclyrcly), 需要下面的代码处理); 若数字个数 < 数字之后的字母个数(如vae123rcly --> vaerclrcly, y没有拷贝进去 需要下面的代码处理); 若数字个数 > 数字之后的字母个数(例如:vae12345rcly 将最后的\0拷贝进去,此时不用处理,即不走下面的代码)
if (lengthOfNum <= lastSumChar) {
i = 0;
while (i < (lastSumChar - lengthOfNum)) {
*temp = *(temp + lengthOfNum);
temp++;
i++;
}
}
*temp = '\0';//用\0将后面的字母截断
char str[20] = "vae123rcly";
printf("原字符串为:%s\n", str);
removeNumArr(str);
printf("去除数字之后的字符串为:%s\n", str);