鱼C论坛

 找回密码
 立即注册
查看: 603|回复: 2

[已解决]S1E19 动动手2

[复制链接]
匿名鱼油
匿名鱼油  发表于 2021-8-3 10:33:20 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 匿名 于 2021-8-3 10:36 编辑

请问这样写为何运行不了
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char str1[1024];//输入的文本
  6.         char str2[1024];//不同的字符
  7.         int i=0,n=0,j=0,k=0,ch,max;//i是str1中的标号,n是比较的循环次数,j是str2中字符的标号,k是比大小的循环次数
  8.         bool flag=0;//输入字符与之前的是否相同的判据
  9.         int s[1024]={0};//每个重复字符的个数
  10.        
  11.         printf("请输入英文文本:");
  12.         while((ch=getchar())!='\n')
  13.         {
  14.                 str1[i++]=ch;
  15.                 for(n=0;n<j;n++)
  16.                 {
  17.                         if(str1[i]==str2[n])
  18.                         {
  19.                                 flag=1;
  20.                                 break;
  21.                         }
  22.                         else
  23.                         {
  24.                                 flag=0;
  25.                          }
  26.                 }
  27.                 if(flag==0)
  28.                 {
  29.                         str2[j++]=str1[i];
  30.                 }
  31.                 else
  32.                 {
  33.                         s[n]++;
  34.                 }
  35.         }
  36.        
  37.         for(k=0;k<1024;k++)
  38.         {
  39.                 max=s[k+1]>s[k]?k+1:k;
  40.         }
  41.        
  42.         printf("您总共输入了%u个字符,其中不同的字符个数有%u个。\n\
  43. 它们是:%s\n出现最多次的字符是\'%c\',\
  44. 它一共出现了%d次\n",strlen(str1),strlen(str2),str2,str2[max],s[max]);
  45.        
  46.         return 0;
  47. }
复制代码
最佳答案
2021-8-3 12:29:04
本帖最后由 jackz007 于 2021-8-3 17:00 编辑

忽略字母大小写的版本
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char str1[128] = {0} ;//输入的文本
  5.         char str2[128] = {0} ;//不同的字符
  6.         int d = 0 , i = 0 , n = 0 , j = 0 , k = 0 , ch , max ; //i是str1中的标号,n是比较的循环次数,j是str2中字符的标号,k是比大小的循环次数
  7.         int s[128] = {0} ;//每个重复字符的个数
  8.         printf("请输入英文文本:")            ;
  9.         while((ch = getchar()) != '\n') {
  10.                 if(ch >= 'A' && ch <= 'Z') ch += ' ' ;
  11.                 str1[d ++] = ch                      ;
  12.                 for(n = 0 ; n < j ; n ++) {
  13.                         if(ch == str2[n]) {
  14.                                 break;
  15.                         }
  16.                 }
  17.                 if(n == j) {
  18.                         str2[j] = ch                  ;
  19.                         s[j ++] ++                    ;
  20.                 } else {
  21.                         s[n] ++                       ;        
  22.                 }
  23.         }
  24.         for(i = 0 , k = 0 , max = 0 ; k < j ; k ++) {
  25.                 if(s[k] > max) {
  26.                         max = s[k]                    ;
  27.                         i = k                        ;
  28.                 }
  29.         }
  30.         printf("您总共输入了%u个字符,其中不同的字符个数有%u个。\n\
  31. 它们是:%s\n出现最多次的字符是\'%c\',\
  32. 它一共出现了%d次\n", d , j , str2 , str2[i] , s[i])  ;
  33.         
  34.         return 0                                     ;
  35. }
复制代码
回复

使用道具 举报

发表于 2021-8-3 12:21:35 | 显示全部楼层
本帖最后由 jackz007 于 2021-8-3 12:43 编辑
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char str1[128] = {0} ;//输入的文本
  5.         char str2[128] = {0} ;//不同的字符
  6.         int d = 0 , i = 0 , n = 0 , j = 0 , k = 0 , ch , max ; //i是str1中的标号,n是比较的循环次数,j是str2中字符的标号,k是比大小的循环次数
  7.         int s[128] = {0} ;//每个重复字符的个数
  8.         printf("请输入英文文本:")            ;
  9.         while((ch = getchar()) != '\n') {
  10.                 str1[d ++] = ch               ;
  11.                 for(n = 0 ; n < j ; n ++) {
  12.                         if(ch == str2[n]) {
  13.                                 break;
  14.                         }
  15.                 }
  16.                 if(n == j) {
  17.                         str2[j] = ch          ;
  18.                         s[j ++] ++            ;
  19.                 } else {
  20.                         s[n] ++               ;        
  21.                 }
  22.         }
  23.         for(i = 0 , k = 0 , max = 0 ; k < j ; k ++) {
  24.                 if(s[k] > max) {
  25.                         max = s[k]            ;
  26.                         i = k                 ;
  27.                 }
  28.         }
  29.         printf("您总共输入了%u个字符,其中不同的字符个数有%u个。\n\
  30. 它们是:%s\n出现最多次的字符是\'%c\',\
  31. 它一共出现了%d次\n", d , j , str2 , str2[i] , s[i]) ;
  32.         
  33.         return 0;
  34. }
复制代码

        编译、运行实况
  1. D:\0002.Exercise\C>g++ -o x2 x2.c

  2. D:\0002.Exercise\C>x2
  3. 请输入英文文本:Hello , World!
  4. 您总共输入了14个字符,其中不同的字符个数有10个。
  5. 它们是:Helo ,Wrd!
  6. 出现最多次的字符是'l',它一共出现了3次

  7. D:\0002.Exercise\C>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-3 12:29:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-8-3 17:00 编辑

忽略字母大小写的版本
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char str1[128] = {0} ;//输入的文本
  5.         char str2[128] = {0} ;//不同的字符
  6.         int d = 0 , i = 0 , n = 0 , j = 0 , k = 0 , ch , max ; //i是str1中的标号,n是比较的循环次数,j是str2中字符的标号,k是比大小的循环次数
  7.         int s[128] = {0} ;//每个重复字符的个数
  8.         printf("请输入英文文本:")            ;
  9.         while((ch = getchar()) != '\n') {
  10.                 if(ch >= 'A' && ch <= 'Z') ch += ' ' ;
  11.                 str1[d ++] = ch                      ;
  12.                 for(n = 0 ; n < j ; n ++) {
  13.                         if(ch == str2[n]) {
  14.                                 break;
  15.                         }
  16.                 }
  17.                 if(n == j) {
  18.                         str2[j] = ch                  ;
  19.                         s[j ++] ++                    ;
  20.                 } else {
  21.                         s[n] ++                       ;        
  22.                 }
  23.         }
  24.         for(i = 0 , k = 0 , max = 0 ; k < j ; k ++) {
  25.                 if(s[k] > max) {
  26.                         max = s[k]                    ;
  27.                         i = k                        ;
  28.                 }
  29.         }
  30.         printf("您总共输入了%u个字符,其中不同的字符个数有%u个。\n\
  31. 它们是:%s\n出现最多次的字符是\'%c\',\
  32. 它一共出现了%d次\n", d , j , str2 , str2[i] , s[i])  ;
  33.         
  34.         return 0                                     ;
  35. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 18:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表