#include// 此处不需要包括 math.h
#include
#define MAX_LEN 100 // 定义一个最大字符串长度
int main(int argc, char *argv[]) {
// 定义原始字符串 s 和输出的字符串 c
char * s, * c;
// 声明一下 fun 函数
char * fun(char * s);
// 为字符串 s 分配足够的内存空间
s = malloc(MAX_LEN * sizeof(char));
printf("请输入字符串\n");
// 此处不使用 scanf 是因为它无法将空格写入字符串
gets(s);
// 将 c 指向函数返回的字符串 a 所占用的空间
c = fun(s);
printf("结果为:\n");
// 打印出转换后的字符串 c
printf("%s", c);
printf("\nEND");
// 释放 s 和 c 所占用的内存空间
free(s);
free(c);
return 0;
}
char * fun(char *s) {
// 定义一个字符串 a
char * a;
int i = 0, j = 0;
// 为 a 分配足够的空间,这里应该是 s 的两倍,
// 因为当 s 全是数字时,结果长度会是原来的两倍。
a = malloc(2 * MAX_LEN * sizeof(char));
// 这里是正确的
while (s[i] != '\0') {
if ((s[i] >= '0') && (s[i] <='9')) {
a[j] = '$';
a[j + 1] = s[i];
j = j + 2;
} else {
a[j] = s[i];
j = j + 1;
}
i++;
}
a[j] = '\0';
// 返回 a 所指的内存空间,供 c 使用
return a;
}
结果如下:
第一次读入的'1'不等于'0',循环结束,共循环0次
可以考虑下用正则表达式做