字符查找初级

字典问题 给一个数组A和一个元素x,判断x是否在A中出现。如果出现,给出位
置。一种方法是先给A排序(附加记录每个元素的原始位置),然后二分查找x。
时间:2018.5.6;
算法能力:查找单个字符在输入中的位置;
缺点:如果出现多次不知道程序选取的是哪一个;
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
    char a;
    int rank;
};node s[1000];
bool com(node x,node y)
{
    if(x.a>y.a)return 1;
    else return 0;
}
int main()
{
    int i=1;
    while(scanf("%c",&s[i].a)!=EOF)
    {
        s[i].rank=i;i++;
    }
    cout<<i<<endl;
    sort(s+1,s+1+i,com);
    char p;cin>>p;
    int mid,l=1,r=i;
	/*for(int j=1;j<=i;j++)cout<<s[j].a;cout<<endl;*/
    while(l<r)
    {
        mid=(l+r)/2;
        if(s[mid].a<p)r=mid-1;
        else l=mid+1;
        if(s[mid].a==p){cout<<"YES rank="<<s[mid].rank;return 0;}
    }
	cout<<"no";
}
做法二:他人做法,没有排序,牺牲了时间复杂度能够找到第一次出现目标字符;
    #include <stdio.h>  
    #include <string.h>  
    int main()  
    {  
        int c, i=0;  
        char str[81];  
        while((c=getchar()) != '\n'){// 记录字符串  
            str[i] = (char) c;  
            i++;  
        }  
        char search;  
        scanf("%c", &search); //记录字符  
      
        int k = 0, flat = 0;  
        //查找字符  
        while(k<i){  
            if(search == str[k]){  
                flat = 1;  
            }  
      
            if(flat){  
                printf("%c", str[k]);  
            }  
            k++;  
        }  
        if(!flat){  
            printf("Not found");  
        }  
    }  
如何保证复杂度和准确呢?5.6日16:58




猜你喜欢

转载自blog.csdn.net/k42946/article/details/80215793