求助C语言问题

2025-04-02 11:37:44
推荐回答(3个)
回答1:

#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;
}

结果如下:

回答2:

第一次读入的'1'不等于'0',循环结束,共循环0次

回答3:

可以考虑下用正则表达式做