字符串中最长的连续出现的字符指针练习
Posted 寄蜉蝣于天地,渺沧海之一粟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串中最长的连续出现的字符指针练习相关的知识,希望对你有一定的参考价值。
链接:http://ica.openjudge.cn/zz/2/
- 总时间限制: 1000ms 内存限制: 65536kB
- 描述
-
求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和tab),如果这样的字符不止一个,则输出第一个
- 输入
- 首先输入N,即测试数据的组数
每组测试数据输入:
一行,一个不包含空白字符的字符串,字符串长度小于200 - 输出
- 一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开
- 样例输入
-
2 aaaaabbbbbcccccccdddddddddd abcdefghigk
- 样例输出
-
d 10 a 1
代码一:不用指针
1 #include<stdio.h> 2 #include<string.h> 3 int main(int argc, char *argv[]) 4 { 5 int n,i,j,k,maxIndex; 6 char str[205]; 7 char count1[205]; 8 int count2[205]; 9 10 freopen("data.in","r",stdin); 11 scanf("%d",&n); 12 for(i=0;i<n;i++) 13 { 14 scanf("%s",str); 15 //memset(count1,‘ ‘,sizeof(count1)); 16 //memset(count2,0,sizeof(count2)); 17 j=0; 18 count1[j]=str[0]; 19 count2[j]=1; 20 for(k=1;str[k]!=‘\0‘;k++) 21 { 22 if(str[k]==count1[j]) 23 { 24 count2[j]++; 25 } 26 else 27 { 28 j++; 29 count1[j]=str[k]; 30 count2[j]=1; 31 } 32 } 33 34 maxIndex=0; 35 for(k=1;k<=j;k++) 36 { 37 if(count2[k]>count2[maxIndex]) 38 { 39 maxIndex=k; 40 } 41 } 42 printf("%c %d\n",count1[maxIndex],count2[maxIndex]); 43 } 44 return 0; 45 }
代码二:用指针和链表。头插法构造链表
1 #include<stdio.h> 2 #include<stdlib.h> 3 struct obj 4 { 5 char ch; 6 int num; 7 struct obj *next; 8 }; 9 int main(int argc, char *argv[]) 10 { 11 int n,i,j,k; 12 char str[205]; 13 struct obj *head,*temp,*p; 14 char maxCh; 15 int maxNum; 16 freopen("data.in","r",stdin); 17 scanf("%d",&n); 18 for(i=0;i<n;i++) 19 { 20 scanf("%s",str); 21 22 head=temp=p=NULL; 23 24 temp=(struct obj *)malloc(sizeof(struct obj)); 25 temp->ch=str[0]; 26 temp->num=1; 27 temp->next=NULL; 28 head=temp; 29 for(j=1;str[j]!=‘\0‘;j++) 30 { 31 if(str[j]==head->ch) head->num=head->num+1; 32 else 33 { 34 temp=(struct obj *)malloc(sizeof(struct obj)); 35 temp->ch=str[j]; 36 temp->num=1; 37 temp->next=NULL; 38 39 temp->next=head; 40 head=temp; 41 } 42 } 43 44 45 p=head; 46 maxCh=head->ch; 47 maxNum=head->num; 48 while(p!=NULL) 49 { 50 if(p->num>=maxNum)//注意:这里要有等号,因为题目要求多个相等值选第一个输出。这里是头插法,选最后一个输出即可。 51 { 52 maxNum=p->num; 53 maxCh=p->ch; 54 } 55 p=p->next; 56 } 57 printf("%c %d\n",maxCh,maxNum); 58 59 p=head; 60 while(p!=NULL) 61 { 62 temp=p; 63 p=p->next; 64 free(temp); 65 } 66 } 67 return 0; 68 }
以上是关于字符串中最长的连续出现的字符指针练习的主要内容,如果未能解决你的问题,请参考以下文章
字符串处理算法最长连续字符及其出现次数的算法设计及C代码实现