华为oj_找出字符串中第一个只出现一次的字符

63 篇文章 0 订阅
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int FindChar(char* pInputString, char* pChar);

int main()
{
    char str[1025];
    char c;
    int r;
    while(gets(str))
    {
        r=FindChar(str,&c);
        if(r==-1)
        {
            printf(".\n");
            continue;
        }
        printf("%c\n",c);
    }
    return 0;
}
int FindChar(char* pInputString, char* pChar)
{
    int a[1025]={0};
    int flag=-1;
    int len=strlen(pInputString);
    int i,j;
    for(i=0;i<len-1;i++)
    {
        if(a[i]==1)
            continue;
        for(j=i+1;j<len;j++)
        {
            if(pInputString[i]==pInputString[j])
                a[i]=a[j]=1;
        }
        if(a[i]==0)
        {
            *pChar=pInputString[i];
            flag=1;
            break;
        }
    }
    if(flag==-1&&a[len-1]==0)
    {
        *pChar=pInputString[len-1];
        flag=1;
    }
    return flag;
}


/*不知道错哪里了!!!提交不了
int FindChar(char* pInputString, char* pChar)
{
    int a[1025]={0};
    int len,l;
    int t=-1;
    pChar=pInputString;
    char *p;
    while(*pChar!='\0') //while(pChar)这样写是错误的,,为什么?
    {
        p=pChar+1;
        len=pChar-pInputString;
        if(a[len]==1)
        {
            pChar++;
            continue;
        }
        while(*p!='\0') //while(p)这样写是错误的,,为什么?
        {
            if(*p==*pChar)
            {
                l=p-pInputString;
                a[l]=1;
                a[len]=1;
            }
            p++;
        }
        if(a[len]==0)
        {
            t=len;
            break;
        }
        pChar++;
    }
    return t;
}
*/

/*
//算法思想错误,惭愧啊!虽然追求新颖的算法,但是,,实力不行出错是灾难性的!!!
int FindChar(char* pInputString, char* pChar)
{
    int i,a[256],flag[256],len;
    for(i=0;i<256;++i)
        flag[i]=a[i]=0;
    len=strlen(pInputString);
    for(i=0;i<len;i++)
    {
        ++a[(int)pInputString[i]];
        flag[(int)pInputString[i]]=i;
    }
    for(i=0;i<256;++i)
    {
        if(a[i]==1)
        {
            *pChar=*(pInputString+flag[i]);
            return 1;
        }
    }
    return 0;
}
*/

这道题目花费了好长时间,,真是……

之前用C++,,还是发现自己字符和字符串在C++中还是没有搞清楚,后来换纯C字符串来做,,调式没有问题,但是提交不了。。最后只有用最简单的方法来解决。数组……


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值