(高分)急~~~~C语言问题

[复制链接]
查看11 | 回复3 | 2008-11-4 00:23:37 | 显示全部楼层 |阅读模式
Write a function that receives a character string (str) and returns the number of repeated characters that occurred in the string.For example, the string "mississippi" has three repeated characters. Do not countrepeated blanks in the string. If acharacter occurs more than twice, it should still only count as one repeated charater; thus "hisssss"would have only one repeated character. You may assume that all characters in the string are lowercase. Use any of the following function prototypes:
int repeated(char str[]);
我怕翻译不好那些专业名词,所以把原题也写出来了,看的懂英文的就直接看原题吧,还是挺简单的。
简单的说,题目就是要求写一个程序,它读进string里的字母,然后得到重复字母的个数。例:string"mississippi"里有3个重复过的字母(i,s,p)。忽略string里的空格。如果一个字母重复出现超过两次,仍然当做只有一个字母重复过。例:string"hisssss"有一个字母重复.假设所有string里的字母都是小写。
我怕没有满意的答案,所有分数放的不多。如有高人能帮我解答的,必有高分!!先谢谢大家了!
请认真点,好不好。我关键不知道该如何排除空格和重复尝过两次的字母。
额```我还是有点搞不清啊。怎么把之后相同的字母都赋予“\0”?+_+
额``两个一样的,我分给谁。。

回复

使用道具 举报

千问 | 2008-11-4 00:23:37 | 显示全部楼层
函数写完了,我大概测试了下是可以的,满意的的话多给点分啊 哈。原理是这样的:因为字母就26个,因此就是用数组记录各个字母出现的次数。这样从头到尾检查字符串中的字符,在ascii码值表中,每个字符都有自己的固定值,并且字符值是连续的,'a'字符是十进制数97,b是98...,z是97+25=122。因此在字符中如果有字符'a',那么'a'-'a'==0.也即ich['a'-'a']==ich[0]会加1,同理如果*str=='z',那就是ich['z'-'a']==ich[25]加1,这样只要是小写字符都会被累加统计到数组ich数组对应的元素中,因为最后要求的是有重复的字符,因此只需判断这个字符数组中个元素值大于1的,并记...
回复

使用道具 举报

千问 | 2008-11-4 00:23:37 | 显示全部楼层
你可以换一种思路。 定义一个char letter[26]={0},依次对应a~z这26个字母。比较string里的各个字母,让相应的letter++。这样到最后统计一下letter中大于2的单元有几个就可以了。 程序很简单,我帮你写了: #include int repeated(char str[]) { ...
回复

使用道具 举报

千问 | 2008-11-4 00:23:37 | 显示全部楼层
你可以从第一个字符开始查,往后查,如果遇到第一个和它相同的就把重复字母的个数加一。然后把之后和它一样的字符都赋值为'\0'(或者为空格' ').访问字符串一遍之后再从二位开始查。这样依次后推。如果遇到空格或者'\0'就不管。大概结构如下:for(i=0;i<a.length();i++){if(a==' ')continue;if(...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行