user-0 提问: C语言函数题在线求助

回复:
user: user-1
content: 学习了，，，

user: user-2
content: 感谢分享！！

user: user-3
content: 这个问题 我不太了解啊

user: user-0
content: 引用 24 楼 user-4的回复:[quote=引用 23 楼 Master Chicken 的回复:] 题目的.c文件，现在只用写.h文件，谢谢大佬了！！ 只用写头文件？真的不是很理解你的题目要求，是要你学会运用宏定义的if else，还是要你学会函数功能的不同实现？ 那你就按你之前发消息的截图，改一改就好 #ifndef SOURCE_H #define SOURCE_H int *counts(const char* const s); #else //加个else吧，但是你的main怎么调用？main也用#if和#else控制吗？ void countLetters(const char* const s, int *counts, int size)  {     int i=0, j=0;     for (;s[i]!='\0'; i++)      {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z'))          {             j = s[i]%32 - 1;             if (j<size)                  counts[j]++;         }     } } #endif[/quote] 编译过了为啥无输出

user: user-0
content: 引用 24 楼 user-4的回复:[quote=引用 23 楼 Master Chicken 的回复:] 题目的.c文件，现在只用写.h文件，谢谢大佬了！！ 只用写头文件？真的不是很理解你的题目要求，是要你学会运用宏定义的if else，还是要你学会函数功能的不同实现？ 那你就按你之前发消息的截图，改一改就好 #ifndef SOURCE_H #define SOURCE_H int *counts(const char* const s); #else //加个else吧，但是你的main怎么调用？main也用#if和#else控制吗？ void countLetters(const char* const s, int *counts, int size)  {     int i=0, j=0;     for (;s[i]!='\0'; i++)      {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z'))          {             j = s[i]%32 - 1;             if (j<size)                  counts[j]++;         }     } } #endif[/quote] 大佬你这个我试过了过不了编译。解释下题目意思：写两个函数，第一个函数在source.c已经写好了（题目给的），现在要提交的是source.h

user: user-4
content: 引用 23 楼 Master Chicken 的回复:题目的.c文件，现在只用写.h文件，谢谢大佬了！！ 只用写头文件？真的不是很理解你的题目要求，是要你学会运用宏定义的if else，还是要你学会函数功能的不同实现？ 那你就按你之前发消息的截图，改一改就好 #ifndef SOURCE_H #define SOURCE_H int *counts(const char* const s); #else //加个else吧，但是你的main怎么调用？main也用#if和#else控制吗？ void countLetters(const char* const s, int *counts, int size)  {     int i=0, j=0;     for (;s[i]!='\0'; i++)      {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z'))          {             j = s[i]%32 - 1;             if (j<size)                  counts[j]++;         }     } } #endif

user: user-0
content: 引用 22 楼 user-4 的回复:[quote=引用 21 楼 Master Chicken 的回复:]  现在不是只用写第二个函数吗，第一个函数在.c文件了题目帮写了，这个改怎么解决 只要函数名不相同就可以了呀，人家有没有写好main函数？ 第一个函数名你就不改用人家写好的countLetters，第二个函数名就改成countLettersExt（名字不重复即可）  或者你可以用宏来控制，比如 #ifdef Fun_2 void countLetters(const char* const s, int *counts, int size) {     int i=0, j=0;     for (;s[i]!='\0'; i++) {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')) {             j = s[i]%32 - 1;             if (j<size) {                 counts[j]++;             }         }     } } #endif 编译时加上-DFun_2参数  你最好是题目提供已经写好的代码都贴出来[/quote]#include "source.h"  int* countLetters(const char * const s) {     int len = strlen(s);     int* arr = (int*)malloc(sizeof(int)*26);     memset(arr, 0, sizeof(int)*26);     for(int i = 0; i < len; ++i) {         if(islower(s[i]))             arr[s[i] - 'a']++;         else              arr[s[i] - 'A']++;     }     return arr; }题目的.c文件，现在只用写.h文件，谢谢大佬了！！

user: user-4
content: 引用 21 楼 Master Chicken 的回复:现在不是只用写第二个函数吗，第一个函数在.c文件了题目帮写了，这个改怎么解决 只要函数名不相同就可以了呀，人家有没有写好main函数？ 第一个函数名你就不改用人家写好的countLetters，第二个函数名就改成countLettersExt（名字不重复即可）  或者你可以用宏来控制，比如 #ifdef Fun_2 void countLetters(const char* const s, int *counts, int size) {     int i=0, j=0;     for (;s[i]!='\0'; i++) {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')) {             j = s[i]%32 - 1;             if (j<size) {                 counts[j]++;             }         }     } } #endif 编译时加上-DFun_2参数  你最好是题目提供已经写好的代码都贴出来

user: user-0
content: 引用 19 楼 user-4的回复:c你就改成变量都定义在函数的最开始，然后new改成malloc，delete改成free 你的代码问题是 #ifndef SOURCE_H int *counts(const char* const s); #endif 的函数声明，和你函数定义的地方不一致 函数定义是 void countLetters(const char* const s, int *counts, int size){}  int* countLetters1(const char* const s) {     int i=0, j=0;     int *res = (int*)malloc(sizeof(int)*26);     memset(res, 0, sizeof(int)*26);     for (;s[i]!='\0'; i++) {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')) {             j = s[i]%32 - 1;             res[j]++;         }     }     return res; }  void countLetters2(const char* const s, int *counts, int size) {     int i=0, j=0;     for (;s[i]!='\0'; i++) {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')) {             j = s[i]%32 - 1;             if (j<size) {                 counts[j]++;             }         }     } }  int main() {     int i=0;     int *counts1 = countLetters1("ABcaB");     for (i=0;i<3;i++) {         printf("counts[%d]=%d\n", i, counts1[i]);     }     free(counts1);          int counts2[10];     memset(counts2, 0, sizeof(counts2));     countLetters2("abCdEfghiJkLmnOpqrStuvwXYz", counts2, 10);     for (i=0;i<10;i++) {         printf("counts[%d]=%d\n", i, counts2[i]);     }     return 0; } 现在不是只用写第二个函数吗，第一个函数在.c文件了题目帮写了，这个改怎么解决

user: user-4
content: 引用 18 楼 Master Chicken 的回复:问题截图  countLetters改成两个函数名countLetters1和countLetters2，如果你要用isLower，要引入相应的头文件#include <ctype.h>

user: user-4
content: c你就改成变量都定义在函数的最开始，然后new改成malloc，delete改成free 你的代码问题是 #ifndef SOURCE_H int *counts(const char* const s); #endif 的函数声明，和你函数定义的地方不一致 函数定义是 void countLetters(const char* const s, int *counts, int size){}  int* countLetters1(const char* const s) {     int i=0, j=0;     int *res = (int*)malloc(sizeof(int)*26);     memset(res, 0, sizeof(int)*26);     for (;s[i]!='\0'; i++) {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')) {             j = s[i]%32 - 1;             res[j]++;         }     }     return res; }  void countLetters2(const char* const s, int *counts, int size) {     int i=0, j=0;     for (;s[i]!='\0'; i++) {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')) {             j = s[i]%32 - 1;             if (j<size) {                 counts[j]++;             }         }     } }  int main() {     int i=0;     int *counts1 = countLetters1("ABcaB");     for (i=0;i<3;i++) {         printf("counts[%d]=%d\n", i, counts1[i]);     }     free(counts1);          int counts2[10];     memset(counts2, 0, sizeof(counts2));     countLetters2("abCdEfghiJkLmnOpqrStuvwXYz", counts2, 10);     for (i=0;i<10;i++) {         printf("counts[%d]=%d\n", i, counts2[i]);     }     return 0; }

user: user-0
content: 引用 16 楼 user-4 的回复:[quote=引用 15 楼 Master Chicken 的回复:]  对不起我知道可是编译过不了啊 把你写的代码发到这里吧，不要用截图的方式发信息，这样方便指出你程序的问题点 [/quote]#include <stdlib.h> #include <string.h> int* countLetters(const char* const s) {     int *res = (int *) malloc(sizeof(int)*26);     memset(res, 0, sizeof(int)*26);     int i=0;     for (;s[i]!='\0'; i++) {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')) {             res[s[i]%32 - 1]++;         }     }     return res; }   void countLetters(const char* const s, int *counts, int size) {     int i=0, j=0;     for (;s[i]!='\0'; i++) {         if ((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')) {             j = s[i]%32 - 1;             if (j<size) {                 counts[j]++;             }         }     } }问题截图

user: user-0
content: 引用 13 楼 user-4 的回复:[quote=引用 10 楼 user-4 的回复:] [quote=引用 9 楼 Master Chicken 的回复:] 是啊c语言函数名不能相同啊可题目两个函数名不是相同吗 我觉得主要是理解题目的意图，而不是纠结函数名是否相同，c不支持重载，你就写成两个函数名 比如一个叫couterLetters1，一个叫countLetters2[/quote] 而且题目并不需要完整的程序（不要求你提供main），只是让你提供函数，所以题目的本意只是考你能不能根据要求实现函数的功能，而不是真的让你用c写两个同名函数[/quote]题目写了.c 文件

user: user-4
content: 引用 15 楼 Master Chicken 的回复:对不起我知道可是编译过不了啊 把你写的代码发到这里吧，不要用截图的方式发信息，这样方便指出你程序的问题点

user: user-0
content: 引用 13 楼 user-4的回复:[quote=引用 10 楼 user-4 的回复:] [quote=引用 9 楼 Master Chicken 的回复:] 是啊c语言函数名不能相同啊可题目两个函数名不是相同吗 我觉得主要是理解题目的意图，而不是纠结函数名是否相同，c不支持重载，你就写成两个函数名 比如一个叫couterLetters1，一个叫countLetters2[/quote] 而且题目并不需要完整的程序（不要求你提供main），只是让你提供函数，所以题目的本意只是考你能不能根据要求实现函数的功能，而不是真的让你用c写两个同名函数[/quote] 对不起我知道可是编译过不了啊

user: user-0
content: 这么说吧你用不同函数名编译也过不了

user: user-4
content: 引用 10 楼 user-4 的回复:[quote=引用 9 楼 Master Chicken 的回复:] 是啊c语言函数名不能相同啊可题目两个函数名不是相同吗 我觉得主要是理解题目的意图，而不是纠结函数名是否相同，c不支持重载，你就写成两个函数名 比如一个叫couterLetters1，一个叫countLetters2[/quote] 而且题目并不需要完整的程序（不要求你提供main），只是让你提供函数，所以题目的本意只是考你能不能根据要求实现函数的功能，而不是真的让你用c写两个同名函数

user: user-0
content: 引用 10 楼 user-4的回复:[quote=引用 9 楼 Master Chicken 的回复:] 是啊c语言函数名不能相同啊可题目两个函数名不是相同吗 我觉得主要是理解题目的意图，而不是纠结函数名是否相同，c不支持重载，你就写成两个函数名 比如一个叫couterLetters1，一个叫countLetters2[/quote] 而且只用提交函数

user: user-0
content: 引用 10 楼 user-4的回复:[quote=引用 9 楼 Master Chicken 的回复:] 是啊c语言函数名不能相同啊可题目两个函数名不是相同吗 我觉得主要是理解题目的意图，而不是纠结函数名是否相同，c不支持重载，你就写成两个函数名 比如一个叫couterLetters1，一个叫countLetters2[/quote] 可是题目规定了函数名啊？

user: user-4
content: 引用 9 楼 Master Chicken 的回复:是啊c语言函数名不能相同啊可题目两个函数名不是相同吗 我觉得主要是理解题目的意图，而不是纠结函数名是否相同，c不支持重载，你就写成两个函数名 比如一个叫couterLetters1，一个叫countLetters2