首页 > 试题广场 >

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

[编程题]找出字符串中第一个只出现一次的字符
  • 热度指数:212274 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
找出字符串中第一个只出现一次的字符


数据范围:输入的字符串长度满足



输入描述:

输入一个非空字符串



输出描述:

输出第一个只出现一次的字符,如果不存在输出-1

示例1

输入

asdfasdfo

输出

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

int main() {
    char str[1024];
    int flag[26] = {0};

    scanf("%s", str);
    
    int len = strlen(str);
    for(int i=0;i<len;i++){
        flag[str[i] - 'a']++;
    }
    
    int i;
    for(i=0;i<len;i++){
        if(flag[ str[i] - 'a' ] == 1){
            printf("%c\n", str[i]);
            break;
        }
    }

    if(i == len){
        printf("-1\n");
    }

    return 0;
}

编辑于 2024-02-29 11:33:50 回复(0)
#include <stdio.h>
#include <string.h>
int frist_str(char str[], int len)
{
    int i = 0;
    int haxh[26][2] = { 0 };
    //记录出现次数和先后顺寻
    for (i = 0; i < len; i++)
    {
        haxh[str[i] - 'a'][0]++;
        if (haxh[str[i] - 'a'][0] == 1)//记录这个字母最先出现的序号
            haxh[str[i] - 'a'][1] = i;
    }

    int min = 1000;//找出序号最小的
    for (i = 0; i < 26; i++)
    {
        if (haxh[i][0] == 1)
        {
            if (haxh[i][1] < min)
                min = haxh[i][1];
        }
    }
    if (min == 1000)
        return -1;
    else
        return min;
}

int main()
{
    char str[1001] = { 0 };
    scanf("%s", str);
    int len = strlen(str);
    int ret = frist_str(str, len);
    if (ret !=-1)
        printf("%c", str[ret]);
    else
        printf("-1");
    return 0;
}


编辑于 2023-12-14 17:49:01 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char str[1001] = { '\0' };
    while (scanf("%s", str) != EOF) {
        int len = strlen(str);
        int arr[1000] = { 0 };
        int num = 1;
        int flag = 1;
        for (int i = 0; i < len; i++)
        {
            num = 1;
            if (arr[i] == 1)
                continue;
            for (int j = i + 1;j < len; j++)
            {
                if (str[i] - str[j] == 0)
                {
                    num++;
                    arr[i] = 1;
                    arr[j] = 1;
                }
            }
            if (num == 1 && arr[i] == 0)
            {
                printf("%c", str[i]);
                flag = 0;
                break;
            }
        }
        if (flag)
        {
            printf("-1");
        }
    }
    return 0;
}
发表于 2023-10-18 14:17:33 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int main() {
    char example[52] = {"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"};
    char* str = malloc(1000);
    scanf("%s", str);
    char stack[1000] = {0};
    int flag = 0;
    for(int i = 0;i<strlen(str);i++) {
        for (int j = 0;j<strlen(stack);j++) {
            if (str[i] == stack[j] ) {
                stack[j] = '1';
                flag = 1;
                break;
            }
        }
        if (flag == 0) {
            int test = 0;
            for (int M= 0;M<strlen(example);M++) {
                if(example[M] == str[i]) {
                    test = 1;
                    example[M] = '1';
                }
                if (test ==1) {
                stack[strlen(stack)] =str[i];
                test=0;
                }
            }
        } else {
            stack[strlen(stack)] = '1';
        }
        flag = 0;
    }
    char* ptr = stack;
    while (ptr!=NULL) {
        if (*ptr == 0) {
            printf("-1");
            break;
        }
        if (*ptr!= '1'){
            printf("%c",*ptr);
            break;
        }
        ptr++;
    }
    return 0;
};
只要我的ifelse足够多,我的代码就不会报错

发表于 2023-09-26 15:59:37 回复(0)
#include <stdio.h>
#include<string.h>

int main() {
    int axi[30]={0},slen;
    char str[1000];
    gets(str);
    slen=strlen(str);
    for(int i=0;i<slen;i++){
        axi[str[i]-92]=axi[str[i]-92]+1;
    }
    for(int i=0;i<slen;i++){
        if(axi[str[i]-92]==1){
            printf("%c",str[i]);
            return 0;
        }
    }
    printf("-1");
    return 0;
}
//这个哪里有问题,我通过不了

发表于 2023-04-07 16:28:15 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
   char str[1000],result;
   int d[1000]={0};
   int i,len,flag=0;
   gets(str);
   len=strlen(str);
   for(i=0;i<len;i++)
   {
       d[str[i]]++;

   }  
   for(i=0;i<len;i++)
   {
      if(d[str[i]==1])
         {
            flag=1;
             printf("%c",str[i]);
              return 0;
         }
      
   } 
    
          printf("-1");
   
    return 0;
   

}哪里出错了???
发表于 2023-04-01 15:32:54 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char str[1000] = {};
    int count[26] = {0};        //记录26个字母出现的次数
    scanf("%s", str);
    int len = strlen(str);

    for(int i=0; i<len; i++){
        count[str[i]-'a']++;
    }
    for(int i=0; i<len; i++){
        if(count[str[i]-'a'] == 1)  //输出第一个只出现一次的字母
        {
            printf("%c", str[i]);
            break;
        }
        if(i == len - 1)            //如果没找到
            printf("-1");
    }
    return 0;
}

发表于 2023-03-03 17:08:48 回复(0)
#include <stdio.h>
#include <string.h>

int main(){
    int hash[128][2];
    memset(hash,0,sizeof(hash));//建立所有字符串的哈希表,对应空格前面的ASCII值用不上
    int i=0;char t;int n=128;int out=-1;
    while(scanf("%c",&t)!=EOF){
        if(!hash[t][0]){//第一列记录出现次序
            hash[t][0]=++i;
        }
        hash[t][1]++;//第二列记录出现次数
    }
    for(int j=127;j>=' ';j--){//寻找最早出现一次的字符
        if(hash[j][1]==1 && hash[j][0]>0){
            if(n>hash[j][0]){
                n=hash[j][0];
                out=j;
            }
        }
    }
    if(out<0){
        printf("-1");return 0;
    }
    printf("%c",out);
}

发表于 2022-06-06 12:17:36 回复(0)
#include <stdio.h>

int main()
{
    char recv[1000];
    scanf("%s",recv);
    int len = strlen(recv);
    
    int i,j;
    int times;
    for(i=0;i<len;i++)
    {
        times = 0;
        for(j=0;j<len;j++)
        {
            if(i == j)
                continue;
            if(recv[i] == recv[j])
                times++;
        }
        if(times == 0)
            break;
    }
    if(times != 0)
        printf("-1");
    else
        printf("%c",recv[i]);
}

发表于 2022-05-17 15:38:19 回复(0)
#include <stdio.h>
#define    N    1000
typedef struct record
{
    char ch;
    int cnt;
}record;
int main()
{
    char str[N];
    record rec[N]={0};
    int i=0,j=0,k;
    gets(str);
    while(str[i]!='\0')
    {
        if(!i)
        {
            rec[j].ch=str[i];
            rec[j].cnt++;
            j++;
        }
        else 
        {
            for(k=0;k<j;k++)
            {
                if(str[i]==rec[k].ch)
                {
                    rec[k].cnt++;
                    break;
                }
            }  
            if(k==j)
            {
                rec[j].ch=str[i];
                rec[j].cnt++;
                j++;
            }
        }
        i++;
    }
    for(i=0;i<j;i++)
    {
        if(rec[i].cnt==1)
        {
            printf("%c\n",rec[i].ch);
            break;
        }
    }
    if(i==j)
        printf("-1\n");
    return 0;
}

发表于 2022-04-29 11:49:15 回复(0)
#include <stdio.h>

int main()
{
    char str[1001] = "";
    while (gets(str) != NULL){
        int ch[256]={0};
        int len = strlen(str);
        for (int i = 0; i < len; i++) {
            ch[str[i]]++;
        }
        int flag = 0;
        for (int i = 0; i < len; i++) {
            if (ch[str[i]] == 1) {
                printf("%c\n", str[i]);
                flag = 1;
                break;
            }
        }
        if (flag == 0) {
            printf("-1\n");
        }
    }
    return 0;
}
发表于 2022-02-24 19:47:12 回复(0)
#include<stdio.h>
int main()
{ 
      char a[1000];
    int j=0;
    int i=0;
    int flag =0;
    while(gets(a)!=NULL)
    {    int flag =0;
        for (i=0;i<strlen(a);i++)
        { 
            for(j=0;j<strlen(a);j++)
            {
            if(i!=j)
            {
                if (a[i]==a[j])
                {
                   flag =1;
                    break;
                 }
                }
                flag=0;
            }
           if(flag==0) break;
        }
        if(flag==0) printf("%c\n",a[i]);
        else printf("-1\n");
    }
}

发表于 2021-11-13 22:57:50 回复(0)
#include<stdio.h>
int main() {
    char a[500];
    while(gets(a)) {
        char zifu[26] = {0};
        int num[26] = {0};
        for (int i = 0; i < strlen(a); i++) {
            int j = 0;
            for (j = 0; j < strlen(zifu); j++) {
                if(a[i] == zifu[j]) {
                    num[j]++;
                    break;
                }
            }
            if(j == strlen(zifu)) {
                zifu[j] = a[i];
                num[j]++;
            }
        }
        int i = 0;
        for (i = 0; i < 26; i++) {
            if(num[i] == 1) {
                printf("%c\n", zifu[i]);
                break;
            }
        }
        if(i == 26) {
            printf("-1\n");
        }
    }
}
发表于 2021-08-21 10:11:44 回复(1)