字符统计程序求纠错!! 来自小甲鱼课后作业~!
题目~!根据要求再写一个字符统计程序,不过这个要更复杂一些。
要求 A:统计用户输入的所有字符个数;
要求 B:统计不同的字符个数,并打印出来
要求 C:找出出现次数最多的字符。
我的代码:
#include <stdio.h>
#include <string.h>
#define MAX 128
int main()
{
char str1;
char str2;//这个数组储存不同的字符
int i=0,j,k=0,r,flag,space1,space2;
int count=1,temp,max;
printf("请输入英文文本:");
while((str1=getchar())!='\n')
{ space1=i;
for(j=0;j<i;j++)
{
flag=0;
if(!(str1-str1))
{flag=1;break;}//flag用于表示录入的该字符是否不曾在前面出现,只要出现一次就是1.
}
if(!flag)//如果是新字符flag就是0,在str2储存这个新字符。
{ str2=str1;
space2=k;
}
}
str1='\0';
str2='\0';
for(j=0;j<k;i++);//用str2中的每个字符与str1中的每个字符相减
{
for(r=0;r<i;r++)
{
temp=1;
if(!(str2-str1))
{temp+=1;}//如果差是0 就往上加一个
}
if(temp>count)//但是count只记录重复数temp最大的值 只输出重复数最大的元素
{
count=temp; max=j;
}
}
printf("你总共输入了%d个字符,其中不同的字符个数有%d个.\n" ,strlen(str1),strlen(str2));
printf("它们是:%s\n" ,str2);
printf("出现最多的字符是‘%c’,它总共出现了%d次\n" ,str2,count);
return 0;
}
问题在于:我这个程序从一开始就无法执行!!
显示了请输入英文文本:
我可以往里输入字符串 比如abcdefsfdgd
可是我按了回车以后没有下一步反应!!!
光标移到了下一行 但是什么也没有再显示 也不能再输入字符!
好难受啊 之前也有过这种情况 参考答案能改回来
可这次和小甲鱼答案思路不太一样(没有他那么秀),不想把自己的思路全部推倒对着答案重来一遍,而且
while((str1=getchar())!='\n')
我是从小甲鱼那里学来的,难道出了问题吗?还是因为我用的是VC6.0版本问题所以不行。
上面程序第29行==>for(j=0;j<k;i++);//用str2中的每个字符与str1中的每个字符相减
i++是不是应该换成j++? 本帖最后由 冲鸭小小苏 于 2018-11-17 22:32 编辑
moc 发表于 2018-11-17 16:33
上面程序第29行==>for(j=0;j
谢谢...改了一下就整出来了..然后更多的问题暴露了
图片不好传描述一下把...
显示请输入英文文本:
我输入了WOWWWW
按完回车是 你总共输入了6个字符,其中不同的字符个数有6个
它们是:烫烫烫
出现最多的字符是' ',它总共出现了2次
??更加蒙逼了 感觉是在\0上出了问题..?还是越界什么的问题..?
刚学c语言 这块真的不懂..不会改...
本帖最后由 冲鸭小小苏 于 2018-11-17 23:26 编辑
又修改更新了一下代码 改正了很多问题 但是在要求C上的问题还是没法解决....
显示打的最多的字符是? 出现了0次...
那一段对应代码后一部分 翻来覆去仔细看了很多很多次..就是看不出来哎
#include <stdio.h>
#include <string.h>
#define MAX 128
int main()
{
char str1;
char str2;//这个数组储存不同的字符
int i=0,j,k=0,r,flag=0,space1,space2;
char max;
int count=0,temp;
printf("请输入英文文本:");
while((str1=getchar())!='\n')
{
for(j=0;j<i&&i>0;j++)
{
flag=0;
if(!(str1-str1))
{flag=1;break;}//flag用于表示录入的该字符是否不曾在前面出现,只要出现一次就是1.
}
if(!flag)//如果是新字符flag就是0,在str2储存这个新字符。
{ str2=str1;
space2=k;
}
space1=++i;
}
str1='\0';
str2='\0';
for(j=0;j<k;j++);//用str2中的每个字符与str1中的每个字符相减
{
temp=0;
for(r=0;r<i;r++)
{
if(!(str2-str1))
{temp++;}//如果差是0 就往上加一个
}
if(temp>count)//但是count只记录重复数temp最大的值 只输出重复数最大的元素
{
count=temp; max=j;
}
}
printf("你总共输入了%d个字符,其中不同的字符个数有%d个.\n" ,strlen(str1),strlen(str2));
printf("它们是:%s\n" ,str2);
printf("出现最多的字符是%c,它总共出现了%d次\n",str2 ,count);
return 0;
} 我也调了好一会,这个j的值老是不正常,后来发现31行最后for();这里多个分号,for循环体根本就进不去啊,
写代码的时候注意;后空几格再写注释,不然你这写在一起很难看 #include <stdio.h>
#include <string.h>
int main(void)
{
char buf;
printf("请输入英文文本: ");
fgets(buf, 512, stdin);
int len = strlen(buf);
buf[--len] = '\0'; // 去掉末尾的'\n'
char table = {0};
for(int i = 0; i < len; ++i)
++table];
int count = 0;
for(int i = 0; i < 128; ++i)
{
if(table)
++count;
}
printf("你总共输入了%d个字符,其中不同的字符个数有%d个.\n", len, count);
printf("它们是: ");
for(int i = 0; i < 128; ++i)
{
if(table)
putchar(i);
}
printf("\n");
int max = 0;
char ch = 0;
for(int i = 0; i < 128; ++i)
{
if(table > max)
{
max = table;
ch = i;
}
}
printf("出现最多的字符是'%c',它总共出现了%d次\n", ch, max);
return 0;
}
moc 发表于 2018-11-18 12:13
我也调了好一会,这个j的值老是不正常,后来发现31行最后for();这里多个分号,for循环体根本就进不去啊,
...
啊啊啊啊啊 真的是这样谢谢你了 一点点小细节搞了这么大的岔子= =
页:
[1]