完善程序,我搞半天了,后两个实在不会

img


对于这方面真的不熟练,望有人解答随便可以给予指导,蟹蟹啦,可以的话,能发展成长期问答,有偿

int counters[27] = {0};
for(int i=0;i<=25;i++)
cutor[t-'A']++;

效果如图,如有帮助给个采纳谢谢:

img

修改后代码如下 , 如有帮助给个采纳谢谢:
需要注意的是 gets(s); 在c11 中已经废弃了 , 建议换成 fgets(s, sizeof(s), stdin);

#include <stdio.h>
#include <string.h>

void countstr(char *st,int cutor[]);

int main()
{
    char s[1000];
    //found
    int counters[27]={0},i; // (1) 初始化为 0
    printf("Input a string\n");
    gets(s);
    countstr(s,counters);
    // *****found *
    for(i = 0; i <=25 ; i++) // (2) i 的取值为 0-25
        printf("%c : %d\n",i+65,counters[i]);
    printf("others : %d\n",counters[i]);
}

void countstr(char *st,int cutor[])
{ 
    int i,j;
    char t;
    i = strlen(st);
    for(j = 0;j< i; j++)
    {
        t = st[j];
        if(t >= 'a' && t <= 'z')
            t =t- 'a' +'A';
        if(t >= 'A' && t <= 'Z')
            // *found 
            cutor[t - 'A']++; // (3) 用字符 A 的 ASCII 码值做差
        else
            cutor[26]++;
    }
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7717976
  • 这篇博客你也可以参考下:连续输入多个数据(个数不确定),用户不断录入数据,直到输入结束标志,结束循环
  • 除此之外, 这篇博客: [ C语言 ] 还不懂指针的一定要进来,带你初始指针,简单使用指针,它没有你想的那么难。中的  举例2:求字符串的长度 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  在之前我们用strlen函数写了可以求字符串的长度

    //求字符串长度的函数 strlen
    #include <string.h>
    
    int My_strlen(char* s)
    {
    	int count = 0;
    	while(*s != '\0')
    	{
    		count++;
    		s++;
    	}
    	return count;
    
    }
    int main()
    {
    	char arr[] = "abc";
    	int len =My_strlen(arr);
    
    	printf("%d\n", len);
    	
    	return 0;
    }

    同样我们也可以使用指针减指针的方法

    int My_strlen(char* s)
    {
    
    	char* start = s;
    	while (*s != '\0')
    	{
    		s++;
    	}
    	return  s - start;
    }
    int main()
    {
    	char arr[] = "abc";
    	int len =My_strlen(arr);
    
    	printf("%d\n", len);
    	
    	return 0;
    }

    分析:

    int main()
    {
    	float a[5];
    	float* p;
    	for (p = &a[5]; p >= &a[0];)
    	{
    		*--p = 0;
    	}
    	return 0;
    }

     

    改进:

    	for (p = &a[4]; p >= &a[0]; p--)
    	{
    		*p = 0;
    	}

     

    标准规定:
    允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与
    指向第一个元素之前的那个内存位置的指针进行比较。

     

     指针 -- 地址
     数组 -- 一组相同类型的数据
    int main()
    {
    	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    	//arr首元素地址
    	int* p = arr;
    	int i = 0;
    	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    	{
    		printf("%p == %p \n", p + i,&arr[i]);
    	}
    
    
    	return 0;
    }

    分析:

     

    可见数组名和数组首元素的地址是一样的。
    结论:数组名表示的是数组首元素的地址
    那么这样写代码是可行的:
    int arr[10] = {1,2,3,4,5,6,7,8,9,0};
    int *p = arr;//p存放的是数组首元素的地址
    既然可以把数组名当成地址存放到一个指针中,我们使用指针来访问一个就成为可能。
    int main()
    {
    	int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
    	int* p = arr; //指针存放数组首元素的地址
    	int sz = sizeof(arr) / sizeof(arr[0]);
    	int i = 0;
    	for (i = 0; i < sz; i++)
    	{
    		printf("&arr[%d] = %p   <====> p+%d = %p\n", i, &arr[i], i, p + i);
    	}
    	return 0;
    }

     所以 p+i 其实计算的是数组 arr 下标为i的地址

    指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?
    这就是 二级指针
    int main()
    {
    	int a = 10;
    	int* pa = &a;
    	int** ppa = &pa; //ppa就是一个二级指针
    	**ppa = 20;
    	printf("%d\n",a);
    
    	return 0;
    }

  • 您还可以看一下 李月喜老师的企业微信开发自建内部应用开发篇课程中的 开发文档如何阅读,如何寻求帮助,如何找到同行小节, 巩固相关知识点