当前位置: 代码迷 >> C语言 >> 一个算法问题
  详细解决方案

一个算法问题

热度:243   发布时间:2006-08-03 12:19:26.0
一个算法问题
想请教一个算法问题:
比较字符串:在一个字符串数组中选出一个,比给定字符串小,但却是小的当中最大的一个字符串。如:abc,123,bdi,dxa,ijf;给定cba,那么符合条件的是:bdi
c,c++实现都可以,我写了一个需要双重循环实现的程序,但我认为单循环就可以实现了,所以想请教一下!为了提高效率急等着解决
搜索更多相关的解决方案: 算法  

----------------解决方案--------------------------------------------------------

char str[10][10]={.....};
char str1="...";
chat *temp;
temp="";
for(int i=0;i<10;i++){
if(strcmp(str[i],str1)==-1 && strcmp(str[i],temp)==1)
temp=str[i];
}
printf("%s\n",temp);


----------------解决方案--------------------------------------------------------
能否将你的程序贴上来。

这样比较,
设定一个指针,保存当前比给定串小但比前面的串的最大者。起始初值可以为NULL.
从第一个字符串开始比较,如果比给定串小,且比当前的Max要大,则将该串保存在Max中。如此比较,直到最后一个字符串。
最后输出Max就是所求。


----------------解决方案--------------------------------------------------------

可以先对数组排序,得到中间值啊.


----------------解决方案--------------------------------------------------------
楼上的你用什么排序?
----------------解决方案--------------------------------------------------------
这个是单片机编程,所以根本就没有内存空间让你先去排序数组啊所以由于效率这一点,让人有点烦 啊!
----------------解决方案--------------------------------------------------------

一重循环是可以实现,
我没做过单片机,不了解,下面这个程序您看看,看满足要求不?
#include "stdio.h"
#include "conio.h"
#include "string.h"
int main()
{
char str[5][20]={"abc","123","bdi","dxa","ijf"},source[20]="cba";
char (*p)[20]=&str[0];
int counter=0;
int flag=1;
char obtstr[20];
for(;counter<5;counter++,p++)
{
if(!flag&&strcmp(source,*p)>0)
{
if(strcmp(obtstr,*p)<0)
{
strcpy(obtstr,*p);
}
}
if(flag&&strcmp(source,*p)>0)
{
strcpy(obtstr,*p);
flag=0;
}

}
printf("the string is \"%s\"",obtstr);
getch();
}


----------------解决方案--------------------------------------------------------
其实3楼所说的我在2楼就已经实现了阿,还能更简单吗?
楼上的时间开销和空间开销都比2楼的要大阿。
----------------解决方案--------------------------------------------------------
把给定字符串和每个字符串比较找出小的,存起来和下一次找出来的比较找出大的!!!
----------------解决方案--------------------------------------------------------
用一个循环,两个比较,一个赋值就能实现!!!
----------------解决方案--------------------------------------------------------
  相关解决方案