找出字符串中第一个只出现一次的字符
数据范围:输入的字符串长度满足
#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; }
#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; }
#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足够多,我的代码就不会报错
#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; } //这个哪里有问题,我通过不了
#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; }哪里出错了???
#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; }
#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); }
#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]); }
#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; }
#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"); } }
#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"); } } }