C/C++编程题:查找字符串中第一个只出现一次的字符,例如字符串为“abaccde”,则输出b,两种算法实现

如题所述

用哈希的方式,把字符在哈希表中统计出每一个的个数来,然后从小开始遍历出第一个为1的
代码如下:
#include <stdio.h>
#include <string.h>

char get_onlyone(char* str)
{
char i;
int hash[128];
memset(hash, 0, sizeof(hash));
for(i = 0; str[i]; i++) {
hash[str[i]]++;
}
for(i = 0; i < 128; i++) {
if(hash[i] == 1) break;
}
return i;
}

int main(void)
{
char str[128];
while(scanf("%s", str) != EOF) {
printf("%c\n", get_onlyone(str));
}
return 0;
}追问

这样写有问题啊,如果字符串为“aadbc”,应该输出d,但按你的程序输出为b

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-18
第一种用普通的数组记录某个字母出现的次数,遍历完字符串就知道哪个出现一次。
第二种可以用哈希思想,去判断某个字母是否出现多次,复杂度也是便利一边的时间追问

能具体写一下代码么?或者伪代码也行,谢了啊

追答

第一种:
int i,a[26]={0}
for(i=0;i<strlen(str);i++)
a[str[i]-'a')]++;
for( i=0;i<strlen(str);i++)
if(a[i]==1)
printf("%c\n");

第二种:(这个不是标准的哈希)
int a[26];
void simpleHash(char x){
int location = (x-'a')%26;
a[location]++;
}
for(i=0;i<strlen(str);i++)
simpleHash(str[i]);
for( i=0;i<strlen(str);i++)
if(a[i]==1)
printf("%c\n");

求C语言编程题
1、编一程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔的输出该串,请用指针完成。#include<stdio.h>int main(){ char string[]="computer"; char *p=string; while(*p) { printf("%c",*p); p++; p++; } getch();} 2、输入一个字符串string,然后在string里面每个字母间加一个空格...

c语言程序设计有关编程题,急求答案
1题#include "stdio.h"main(){ int n,i;float sum=0,t,a=1.0,b=1;printf("please input n:");scanf("%d",&n);for(i=0;i<n;i++){ t=a\/b;sum+=t;b=b+2;} printf("sum=%f\\n",sum);} 2题#include "stdio.h"include"math.h"main(){ int n,bai,shi,ge;while(1)...

C++ 数组 输入一行字符串(长度小于80个字符,只有字母和数字),统计其中...
include <string> int main(){ const int n = 80;int i = 0;char str[n] = { NULL };\/\/字符数组 int Numb_count = 0;\/\/数字个数 int ABC_count = 0;\/\/大写字母个数 int abc_count = 0;\/\/小写字母个数 scanf("%s", str);\/\/连续输入字符到字符数组 while (str[i] != '\\...

2024秋招美团笔试面经 - 编程题&题解
T2: 子序列查找 分析小美在纸上组成的所有字符串,寻找是否包含子序列"meituan"。可以使用双指针法,如示例2中找到包含子序列的字符串"meituqan"。T3: 最小操作次数 问题要求使第一个元素成为数组最大值,通过模拟操作次数找到最小操作次数,如示例1中只需将第一个元素乘两次即可。T4: 删除元...

自考“C语言程序设计”模拟试题一
{int a=5,b=-1,c; c=adds(a,b); printf(“%d”,c); c=adds(a,b); printf(“%d\\n”,c); } int adds(int x,int y) {static int m=0,n=3; n*=++m; m=n%x+y++; return(m); } A. 2,3 B. 2,2 C. 3,2 D. 2,4 11、下列描述中不正确的是( )。 A. 字符型数组中可能...

c++编程题建立学生类,数据成员包括姓名、年龄、性别,成员函数包括
以下程序在DEV C++平台上运行通过:#include <iostream> \/\/控制台头文件#include <string.h> \/\/字符串操作头文件class Stu \/\/定义学生类 {private: \/\/私有成员关键字 char Name[16]; \/\/姓名 int Year; \/\/年龄 bool Sex; \/\/性别(true为男,false为女) public...

求一些c编程题
1、C语言程序的基本单位是___ A) 程序行 B) 语句 C) 函数 D) 字符、C、1 2、C语言程序的三种基本结构是___ A、顺序结构,选择结构,循环结构 B、递归结构,循环结构,转移结构 C、嵌套结构,递归结构,顺序结构 D、循环结构,转移结构,顺序结构、A、1 3、C语言规定,程序中各函数之间 A) 既允许直接递归...

C语言试题
A. 4 4 B. 2 2 C. 2 4 D. 4 6 20、不能把字符串:Hello!赋给数组b的语句是( )。 A. char b[10]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; B. char b[10]; b=“Hello!”; C. char b[10]; strcpy(b,“Hello!”); D. char b[10]=“Hello!”; 三、读程序题 1、float...

C语言程序设计
一:D C C A A A C B C A 二:1):include<stdio.h> void main(){ int m,i,sum;printf("请输入要计算的整数:");scanf("%d",&m);for(i=1,sum=0;i<=m;i++)if (m\/i*i==m)sum+=i;printf("因子和sum=%d\\n",sum);} 2):include<stdio.h> void main(){ int m,...

c++编程题 1.编写一个函数,安所给的百分制的成绩分数,返回与该分数对应...
第一个函数 include <stdio.h> include <math.h> int main(void){ double a, b, c, temp, y, s;printf("input a,b,c:");scanf("%lf%lf%lf", &a, &b, &c);if (a < b){ temp = a;a = b;b = temp;} if (a < c){ temp = a;a = c;c = temp;} if (b <...

相似回答