C 查找列表中重复的对数
给定任意的C 查找列表中重复的对数,c,arrays,string,char,repeat,C,Arrays,String,Char,Repeat,给定任意的char[]查找字符串中的字符对数。因此,这将是3: aabbcc 如果两对相同字符相邻,则应计算两对字符。因此,这将是3: aaaabb 中断的单个字符必须重置连续字符对的计数。这就是1: 亚伯克 如果中断的单个字符与前一个字符对相同,则不会重置连续字符对的计数。因此,这将是3: aabbbccc 这是一个改编自。对这个问题的最初解释很有趣,但评论不断改变这个问题的性质,使其与最初的解释不同。如果I是最后一个元素的索引,那么循环控制应该使用数组的大小作为范围,并且a[I+1]的索引
char[]
查找字符串中的字符对数。因此,这将是3:
aabbcc
如果两对相同字符相邻,则应计算两对字符。因此,这将是3:
aaaabb
中断的单个字符必须重置连续字符对的计数。这就是1:
亚伯克
如果中断的单个字符与前一个字符对相同,则不会重置连续字符对的计数。因此,这将是3:
aabbbccc
这是一个改编自。对这个问题的最初解释很有趣,但评论不断改变这个问题的性质,使其与最初的解释不同。如果
I
是最后一个元素的索引,那么循环控制应该使用数组的大小作为范围,并且a[I+1]
的索引可能是不受限制的,因此使用a[I-1]
代替并在范围内迭代[1
。sizeof(a)/sizeof(a[0])
]更可取
该算法最好用3个变量求解:
指向当前连续字符字符串的第一个元素char*last
当前计数中的连续对数int count1
记录的最大连续对数int count
last
设置为NULL
,如果count1
大于count
将count1
分配给count
,并将count1
重置为0
last
设置为此连续字符字符串中的第一个字符(a[i-1]
)size_t i = 0;
char* last = NULL;
long int count1 = 0;
long int count = 0;
char a[] = {'d', 'p', 'p', 'c', 'c', 'd', 'd', 'd'};
while (++i < sizeof(a) / sizeof(a[0])) { // This will iterate over the range: [1 .. sizeof(a) / sizeof(a[0])]
if (a[i - 1] == a[i]) { // Test previous character to avoid going out of range
if (last == NULL) { // Entry to state 2
last = a + i - 1;
}
} else if (last != NULL) {
if (a + i - last > 1) { // Entry to state 3
count1 += (a + i - last) / 2;
last = a + i;
} else { // Entry to state 1
if (count1 > count) { // If the current count is larger
count = count1; // Replace the maximum count
}
count1 = 0; // Reset the current count
last = NULL;
}
}
}
if (last != NULL) { // Entry to state 3
if (a + (sizeof(a) / sizeof(a[0])) - last > 1) {
count1 += (a + (sizeof(a) / sizeof(a[0])) - last) / 2;
}
if (count1 > count) { // If the current count is larger
count = count1; // Replace the maximum count
}
}
printf("%ld", count);
size\u t i=0;
char*last=NULL;
长整数计数1=0;
长整数计数=0;
字符a[]={'d','p','p','c','c','d','d','d'};
而(++i1){//进入状态3
count1+=(a+i-最后一次)/2;
last=a+i;
}else{//进入状态1
如果(count1>count){//如果当前计数较大
count=count1;//替换最大计数
}
count1=0;//重置当前计数
last=NULL;
}
}
}
如果(last!=NULL){//进入状态3
如果(a+(sizeof(a)/sizeof(a[0])-last>1){
count1+=(a+(sizeof(a)/sizeof(a[0])最后一次)/2;
}
如果(count1>count){//如果当前计数较大
count=count1;//替换最大计数
}
}
printf(“%ld”,计数);
[]您将i声明为int,但您正在将其与一个非singned(sizeof)进行比较,然后count被声明为int,这里count1+=(a+i-last)/2;**错误:从“long int”转换为“int”可能会改变其属性value@Michi有趣的是,在64位机器上转换失败是有道理的。我想一定是32位的,因为我没有任何问题。无论是哪种情况,我相信我已经解决了,谢谢你的提示。上传你如何解释它,是的,现在com好的。