广告
淘宝内部优惠券
当前位置: 开发异常方案库» C/C++ » C语言函数题在线求助

C语言函数题在线求助

开发异常方案库  收集整理于:2020-05-13 19:23:00  浏览:66次

------网友观点--------------------
这个其实还有点意思,从头到尾遍历字符串,遇到一个字母,就在对应的数组位置➕1

------网友观点--------------------
引用 1 楼 Simple-Soft的回复:
这个其实还有点意思,从头到尾遍历字符串,遇到一个字母,就在对应的数组位置➕1
可否看一下代码?

------网友观点--------------------
现在没有电脑在身边,大致思路就那样,假设获得字符串的每个字符,设为c,如果c在A-Z之间,则counter[c-'A']++,如果在a-z之间,则counter[c-'a']++

------网友观点--------------------
引用 3 楼 Simple-Soft 的回复:
现在没有电脑在身边,大致思路就那样,假设获得字符串的每个字符,设为c,如果c在A-Z之间,则counter[c-'A']++,如果在a-z之间,则counter[c-'a']++
请问第二个函数是要干嘛?

------网友观点--------------------
for example
int* countLetters(const char* const s) {
    int *res = new 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]++;
            }
        }
    }
}
int main() {
    int i=0;
    int *counts1 = countLetters("ABcaB");
    for (i=0;i<3;i++) {
        printf("counts[%d]=%d\n", i, counts1[i]);
    }
    delete []counts1;
    
    int counts2[10];
    memset(counts2, 0, sizeof(counts2));
    countLetters("abCdEfghiJkLmnOpqrStuvwXYz", counts2, 10);
    for (i=0;i<10;i++) {
        printf("counts[%d]=%d\n", i, counts2[i]);
    }
    return 0;
}

------网友观点--------------------
引用 4 楼 Master Chicken 的回复:
请问第二个函数是要干嘛?
第一个函数是为了让你掌握用指针返回处理结果,第二个函数是为了让你掌握用数组传递参数,实际上处理都差不多

------网友观点--------------------
引用 5 楼 qybao的回复:
for example
int* countLetters(const char* const s) {
    int *res = new 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]++;
            }
        }
    }
}
int main() {
    int i=0;
    int *counts1 = countLetters("ABcaB");
    for (i=0;i<3;i++) {
        printf("counts[%d]=%d\n", i, counts1[i]);
    }
    delete []counts1;
    
    int counts2[10];
    memset(counts2, 0, sizeof(counts2));
    countLetters("abCdEfghiJkLmnOpqrStuvwXYz", counts2, 10);
    for (i=0;i<10;i++) {
        printf("counts[%d]=%d\n", i, counts2[i]);
    }
    return 0;
}
C语言不会出现函数重载问题么?

------网友观点--------------------
重载是c++概念

------网友观点--------------------
引用 8 楼 Simple-Soft的回复:
重载是c++概念
是啊c语言函数名不能相同啊可题目两个函数名不是相同吗

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

------网友观点--------------------
引用 10 楼 qybao的回复:
Quote: 引用 9 楼 Master Chicken 的回复:
是啊c语言函数名不能相同啊可题目两个函数名不是相同吗
我觉得主要是理解题目的意图,而不是纠结函数名是否相同,c不支持重载,你就写成两个函数名 比如一个叫couterLetters1,一个叫countLetters2
可是题目规定了函数名啊?

------网友观点--------------------
引用 10 楼 qybao的回复:
Quote: 引用 9 楼 Master Chicken 的回复:
是啊c语言函数名不能相同啊可题目两个函数名不是相同吗
我觉得主要是理解题目的意图,而不是纠结函数名是否相同,c不支持重载,你就写成两个函数名 比如一个叫couterLetters1,一个叫countLetters2
而且只用提交函数

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

------网友观点--------------------
这么说吧你用不同函数名编译也过不了

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

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

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

------网友观点--------------------
引用 16 楼 qybao 的回复:
Quote: 引用 15 楼 Master Chicken 的回复:
对不起我知道可是编译过不了啊
把你写的代码发到这里吧,不要用截图的方式发信息,这样方便指出你程序的问题点
#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]++;
            }
        }
    }
}
问题截图

------网友观点--------------------
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;
}

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

------网友观点--------------------
引用 19 楼 qybao的回复:
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文件了题目帮写了,这个改怎么解决

------网友观点--------------------
引用 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参数 你最好是题目提供已经写好的代码都贴出来

------网友观点--------------------
引用 22 楼 qybao 的回复:
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参数 你最好是题目提供已经写好的代码都贴出来
#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文件,谢谢大佬了!!

------网友观点--------------------
引用 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

------网友观点--------------------
引用 24 楼 qybao的回复:
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
大佬你这个我试过了过不了编译。解释下题目意思:写两个函数,第一个函数在source.c已经写好了(题目给的),现在要提交的是source.h

------网友观点--------------------
引用 24 楼 qybao的回复:
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
编译过了为啥无输出

------网友观点--------------------
引用 26 楼 Master Chicken 的回复:
编译过了为啥无输出
你的main函数是怎么调用的。再说,这个函数只是现实了统计,并没有实现打印功能,如果调用函数不会打印结果。结果你可以在main函数里自己打印。

------网友观点--------------------
引用 27 楼 qybao 的回复:
Quote: 引用 26 楼 Master Chicken 的回复:
编译过了为啥无输出
你的main函数是怎么调用的。再说,这个函数只是现实了统计,并没有实现打印功能,如果调用函数不会打印结果。结果你可以在main函数里自己打印。
可是我怎么知道题目的main函数和我写的一不一样

------网友观点--------------------
引用 28 楼 Master Chicken 的回复:
可是我怎么知道题目的main函数和我写的一不一样
题目不要求你写main,也不要求你写的函数输出结果,所以我觉得不用管输出了吧,那是main函数的管辖范围,不是你的函数的管辖范围

------网友观点--------------------
引用 29 楼 qybao的回复:
Quote: 引用 28 楼 Master Chicken 的回复:
可是我怎么知道题目的main函数和我写的一不一样
题目不要求你写main,也不要求你写的函数输出结果,所以我觉得不用管输出了吧,那是main函数的管辖范围,不是你的函数的管辖范围
难道还是函数问题

------网友观点--------------------
引用 30 楼 Master Chicken 的回复:
Quote: 引用 29 楼 qybao的回复:
Quote: 引用 28 楼 Master Chicken 的回复:
可是我怎么知道题目的main函数和我写的一不一样
题目不要求你写main,也不要求你写的函数输出结果,所以我觉得不用管输出了吧,那是main函数的管辖范围,不是你的函数的管辖范围
难道还是函数问题
不太懂

------网友观点--------------------
引用 31 楼 IUviolet的回复:
Quote: 引用 30 楼 Master Chicken 的回复:
Quote: 引用 29 楼 qybao的回复:
Quote: 引用 28 楼 Master Chicken 的回复:
可是我怎么知道题目的main函数和我写的一不一样
题目不要求你写main,也不要求你写的函数输出结果,所以我觉得不用管输出了吧,那是main函数的管辖范围,不是你的函数的管辖范围
难道还是函数问题
不太懂
木事木事。。

------网友观点--------------------
引用 30 楼 Master Chicken 的回复:
难道还是函数问题
不知道你是怎么理解问题的? 人家题目明明要求write a function(写一个函数),write another function(写另一个函数),结果你却来个只需要写头文件。题目没有要求输出,也没有要求提供main,结果你却来个看不到打印结果?所以真不知道怎么才能达到你的要求了。实在不行,你就在函数里追加printf代码吧。

------网友观点--------------------
引用 33 楼 qybao的回复:
Quote: 引用 30 楼 Master Chicken 的回复:
难道还是函数问题
不知道你是怎么理解问题的? 人家题目明明要求write a function(写一个函数),write another function(写另一个函数),结果你却来个只需要写头文件。题目没有要求输出,也没有要求提供main,结果你却来个看不到打印结果?所以真不知道怎么才能达到你的要求了。实在不行,你就在函数里追加printf代码吧。
服了人家.c已经有第一个函数了你再写上去人家说你重名我有printf啊

------网友观点--------------------
引用 33 楼 qybao的回复:
Quote: 引用 30 楼 Master Chicken 的回复:
难道还是函数问题
不知道你是怎么理解问题的? 人家题目明明要求write a function(写一个函数),write another function(写另一个函数),结果你却来个只需要写头文件。题目没有要求输出,也没有要求提供main,结果你却来个看不到打印结果?所以真不知道怎么才能达到你的要求了。实在不行,你就在函数里追加printf代码吧。
而且测试说的没有输出不是我说的

------网友观点--------------------
引用 33 楼 qybao的回复:
Quote: 引用 30 楼 Master Chicken 的回复:
难道还是函数问题
不知道你是怎么理解问题的? 人家题目明明要求write a function(写一个函数),write another function(写另一个函数),结果你却来个只需要写头文件。题目没有要求输出,也没有要求提供main,结果你却来个看不到打印结果?所以真不知道怎么才能达到你的要求了。实在不行,你就在函数里追加printf代码吧。
老实说这题我弄很久了开始也是写两个,但是一直说我重名编译都过不了。最新那个过了编译但是说没有输出

------网友观点--------------------
引用 35 楼 Master Chicken 的回复:
而且测试说的没有输出不是我说的
别人有了第一个函数,你就再写一个不同名的函数或者用宏#if来控制就好了。 再说,题目没有要求输出结果,输出什么样的结果(格式等等)都没交代,就算有你输出别人一句【你的输出不符合要求】你也没辙。 所以谁说你没输出的,你就找他要main函数。如果他的main函数根本就没调用你的函数,就算你在函数里加了printf也一样没有输出。

------网友观点--------------------
引用 37 楼 qybao的回复:
Quote: 引用 35 楼 Master Chicken 的回复:
而且测试说的没有输出不是我说的
别人有了第一个函数,你就再写一个不同名的函数或者用宏#if来控制就好了。 再说,题目没有要求输出结果,输出什么样的结果(格式等等)都没交代,就算有你输出别人一句【你的输出不符合要求】你也没辙。 所以谁说你没输出的,你就找他要main函数。如果他的main函数根本就没调用你的函数,就算你在函数里加了printf也一样没有输出。
是啊我就是不懂main是啥而已我也觉得代码没问题

------网友观点--------------------
不太懂。。。。

------网友观点--------------------
这个问题 我不太了解啊

------网友观点--------------------

------网友观点--------------------
发布此文章仅为传递网友分享,不代表本站观点,若侵权请联系我们删除,本站将不对此承担任何责任。
软件开发 程序错误 异常 ybaby.netCopyright © 2020-2026  ybaby 版权所有  桂ICP备17004385号-2 网站地图