帮忙看看这个程序哪里有错误啊?多谢了!!!

abckangaroo 2009-05-14 10:17:26
编程求出输入字符串的最长升序子串的长度。例如,由输入字符串abdbch可以构成的升序子串有:abd、abch、bbch、abbch等。其中最长的升序子串是abbch,其长度为5。
【输入样例】abdbch
【输出样例】5
#include <stdio.h>
#include <string.h>
void reverse (char s[],int l);

int main ()
{
int i=0,l=0,j,k,n,m;
char c,s[10000],t[10000];
while(1)
{
scanf("%s",&s[i++]);
if((c=getchar())=='\n')
break;
}
l=strlen(s);//输入的字符串长度为l
for (k=0;k<l;k++){//把s[]复制到t[]
t[k]=s[k];
}
for (j=0,n=1;j<l-1;j++){
if (s[j+1]>s[j] || s[j+1]==s[j])
++n;
else
s[j+1]=s[j];
}
reverse (t,l);//定义转换字符串的函数
for (j=0,m=1;j<l-1;j++){
if (t[j+1]>t[j] || t[j+1]==t[j])
++m;
else
t[j+1]=t[j];
}
if (m>n)
printf ("%d\n",m);
else
printf ("%d\n",n);
return 0;
}

void reverse (char s[],int l)
{
int i,j;
char tmp;
for (i=0,j=l;i<j;i++,j--){
tmp=s[i];
s[i]=s[j];
s[j]=s[i];
}
}

...全文
169 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chyjp2008 2009-05-18
  • 打赏
  • 举报
回复
【输入样例】abcdbbbbbbbae
【输出样例】5(abcde)
正确答案 10(abbbbbbbbe)
显然LZ思路有问题
十楼MM很强大,向你学习!
fx397993401 2009-05-18
  • 打赏
  • 举报
回复

// 最大字符串 问题 用枚举来解决
# include<stdio.h>
#include<string.h>
#include<conio.h>

int main()
{
char *pat = "vccc";
char str[12] = "aavccabbaab";
int i,j, count,max = 0,start = 0,i_num;
int n = strlen(pat),m = strlen(str);

for(max = 0,i = 0; i < n; i ++)
{
for(j = 0,count =1,i_num = 0; j < m; j ++)//count 用来存储最大字符串的字符串数
{
if(pat[i+i_num++] == str[j])
count ++;
else //还是要继续 去判断 而不是直接退出
i_num = 0;
}
if(max < count)
max = count,start = i;//start 记录最大子串的初始顺序
}
printf("%d",max);
for(i =start,j = 0;j < max; j ++)
printf("%c",pat[i+j]);
getch();
return 0;
}

刚好前不久···写了的 就贴上来 参考下
拈花一叶 2009-05-17
  • 打赏
  • 举报
回复
看不明白楼主的算法
写了一个给楼主参考...
#include <stdio.h>
#include <string.h>
#define MAX 100
int len(char *t){
int l = 0 ;
char *s = t;
char ch = *s;
while(*s){
if (ch <= *s)
{
l++;
ch = *s;
}
s++;
}
return l;
}
void main(){
char array[MAX];
int length;

gets(array);
char *p = array, *q = p+1;
length = len(p);
while(*p && *q)
{
if (*p > *q && len(p) < len(q) )
{
while(*p > *q)
p--;
p++;
if (len(p) < len(q))
length = length + len(q) - len(p);
}
p = q;
q++;
}
printf("%d\n", length);
}
abckangaroo 2009-05-17
  • 打赏
  • 举报
回复
是不是我理解有问题啊?
如果输入abaaa,结果是不是应该输出4?
修改了一下,代码如下:


#include <stdio.h>
#include <string.h>

int main ()
{
int i=0,l=0,j,k,n,m;
char c,s[10000],t[10000];
while(1)
{
scanf("%s",s);
if((c=getchar())=='\n')
break;
}
l=strlen(s);//输入的字符串长度为l
for (k=0;k<l;k++){//把s[]复制到t[]
t[k]=s[k];
}
for (j=0,n=1;j<l-1;j++){//遍历顺序为a,b,d,b,c,h
if (s[j+1]>s[j] || s[j+1]==s[j])
++n;
else
s[j+1]=s[j];
}
for (j=l-1,m=1;j>0;j--){//遍历顺序为h,c,b,d,b,a
if (t[j]>t[j-1] || t[j]==t[j-1])
++m;
else
t[j-1]=t[j];
}
if (m>n)
printf ("%d\n",m);
else
printf ("%d\n",n);
return 0;
}
chocolate001 2009-05-16
  • 打赏
  • 举报
回复
while(1) {
scanf("%s",&s[i++]);
if((c=getchar())=='\n')
break;
}
//和下面的效果是一样的

while(1) {
scanf("%s",s);
if((c=getchar())=='\n')
break;
}

拈花一叶 2009-05-16
  • 打赏
  • 举报
回复
mark
有点像KMP算法
好像是个挺复杂的问题...
abckangaroo 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 abckangaroo 的回复:]
引用 2 楼 apoptosis 的回复:
C/C++ code
while(1) {
scanf("%s",&s[i++]);
if((c=getchar())=='\n')
break;
}


改成:

C/C++ code
while(1) {
scanf("%s",s);
if((c=getchar())=='\n')
break;
}


这个没有关系吧……


这个的确有关系……
lpf000 2009-05-15
  • 打赏
  • 举报
回复
把你的求字串长度用一个函数实现,主函数调用输出就OK
lpf000 2009-05-15
  • 打赏
  • 举报
回复
你的算法可以了吧
lpf000 2009-05-15
  • 打赏
  • 举报
回复
reverse (t,l);//不需反向转换,反向遍历就是
else
continue;//这样就可以了 你只需输出长度
abckangaroo 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 apoptosis 的回复:]
C/C++ code
while(1) {
scanf("%s",&s[i++]);
if((c=getchar())=='\n')
break;
}



改成:

C/C++ code
while(1) {
scanf("%s",s);
if((c=getchar())=='\n')
break;
}
[/Quote]

这个没有关系吧……

还有,哪位高手能给出一个比较好的算法?????????希望指点一下思路~~~
apoptosis 2009-05-14
  • 打赏
  • 举报
回复

while(1) {
scanf("%s",&s[i++]);
if((c=getchar())=='\n')
break;
}

改成:

while(1) {
scanf("%s",s);
if((c=getchar())=='\n')
break;
}
liliangbao 2009-05-14
  • 打赏
  • 举报
回复
帮顶~

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧