T


私信TA

用户名:uq_46564285848

访问量:361

签 名:

今天不努力,明天变垃圾。

等  级
排  名 10251
经  验 1101
参赛次数 1
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

       原题:编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。

       思路:

       一、在主函数中输入字符串、输出统计结果。所以此处考虑用一个字符串数组(str[])用来存储字符串信息,一个整形数组(count[4])用来存储统计的个数。count[4]中count[0]、count[1]、count[2]、count[3]的值分别对应字母、数字、空格和其它字符的数量。

       二、在主函数中输入字符串,将两个数组作为参数传递给自定义的函数,用循环遍历字符串数组,并用if...else if...else if...else...判断字符类型,统计各种字符的数量存入数组count。

       三、在主函数用for循环顺序输出count各元素的值,别忘了用空格隔开。


注意事项:

       在判断字符类型时,注意循环的循环条件。若使用的是for循环,可以选择两种循环条件:(1)for (int i = 0; str[i] != '\0'; i++)   字符串数组中,最后一个字符是'\0',但它不属于我们的统计范围。(2)for (int i = 0; i < strlen(str); i++)   用strlen()函数获取字符串长度,然后遍历。若选择的是while循环,可选择str[i] != '\0'作为循环条件。


题外话:

       关于输入字符串的函数,在本例中使用的是gets()。其实在最开始,我是选择fgets()来输入字符串的。原因:这里是参考这个博客来选择的(C语言中gets_s(),gets(),fgets()函数的比较。_hunzhizi的博客-CSDN博客_gets_s)

      (1)gets()函数不会检查函数边界,输入多少读多少,直到碰到换行符(回车)才会将换行符以外的信息存入字符串,容易造成缓冲区溢出。

      (2)fgets()函数的输入参数中,通过第二个参数指明了字符串的最大长度,到达最大长度时,即使没有读到换行符也会停止读取,可以解决溢出问题,比gets()函数安全。

       这两个函数都是在碰到换行符时结束读取,但是gets()函数不保留换行符,而fgets()函数会将换行符储存在字符串中。也就是说,gets()函数获取的字符串末尾是'\0',而fgets()函数获取的字符串的末尾是'\n'、'\0',若使用fgets()来完成本题的话,循环的循环条件就是str[i] != '\n'。

      我一开始就是按照这个想法,用fgets()函数来解题,我自己调试运行得到的结果是正确的,但是提交之后的答案都有错。我自己还没想清楚原因,(代码放在最后)如果哪位知道这是什么原因的话,还请指点一下,谢谢!!!


参考代码:

#include#include#define MAX 100

void CharType(char str[],int count[])
{

	for (int i = 0; str[i] != '\0'; i++)
	{
		if (  str[i] >= 'a'&& str[i] = 'A' && str[i] = '0' && str[i] <= '9')
		{
		    count[1] += 1;
		}
		else if(str[i] == ' ')
		{
		    count[2] += 1;
		}
		else
		{
		    count[3]  += 1;
		}
	}
}

int main()
{
	char str[MAX];
	int count[4] = {0};
	gets(str);//键盘获取字符串
	CharType(str,count);//判断字符类型、统计个数
	for(int i=0; i<4; i++)
	{
	    printf("%d ", count[i]);
	}
	return 0;
}

用fgets()函数解题的代码 (提交之后的结果是答案错误,求解惑!) :

#include#include#define MAX 100

void CharType(char str[],int count[])
{

	for (int i = 0; str[i] != '\n'; i++)
	{
		if (  str[i] >= 'a'&& str[i] = 'A' && str[i] = '0' && str[i] <= '9')
		{
		    count[1] += 1;
		}
		else if(str[i] == ' ')
		{
		    count[2] += 1;
		}
		else
		{
		    count[3]  += 1;
		}
	}
}
int main()
{

    char str[MAX];
    int count[4] = { 0 };
    /*键盘获取字符串*/
    fgets(str, MAX, stdin);
    /*判断字符类型、统计个数*/
    CharType(str, count);
    /*输出统计结果*/
    for (int i = 0; i < 4; i++)
    {    
        printf("%d ", count[i]);
    }
    return 0;
}
 

0.0分

0 人评分

  评论区

  • «
  • »