`
v5qqbrowser
  • 浏览: 358222 次
文章分类
社区版块
存档分类
最新评论

如何在字符串里查找第一个不重复的字母,即只出现一次的最靠前的字母

 
阅读更多

我在写这个程序时突然想起一个问题,就是C语言里给int一维数组初始化赋值的问题,比如我写:

int index[11]={0}; 那么此时数组中所有的元素初始化值均为0;但是我写:

int index[11]={-1};此时我以为所有元素的值均为-1了,其实不是这样的,当{}中的值的个数小于数组元素个数时,只有数组前面对应的元素被赋值了,而后面多余的元素被默认初始化为0了,所以这句话执行后,只有index[0]的值为-1,而其余元素均为0;但是如果我这样写:

int index[11]; 那么你也不要天真地以为所有元素默认值均为0,其实不然,这样写的话,所有元素的值均为随机值。

这就是数组初始化时我们应该注意的地方。好了,下面说说这个算法:

源代码如下:

#include <iostream>

using namespace std;

char findIt(const char *str);
int main()
{
char str[]="iamastudenti";

cout << findIt(str) << endl;
return 0;
}

char findIt(const char *str)
{
int count[26]={0};
int index[26]={0}; //注意int数组初始化赋值时,如果写成={-1}是不能给所有元素初始化为-1的,只有第一个元素是-1,其余为默认值0
unsigned int i;
int pos;
for(i=0;i<strlen(str);i++)
{
count[str[i]-'a']++; //记录该字母出现的次数
// cout<<count[str[i]-'a']<<endl;
if(index[str[i]-'a']==0)
{
index[str[i]-'a']=i; //记住该字母第一次出现时的索引
}
}
pos=strlen(str);
for(i=0;i<26;i++)
{
if(count[i]==1) //找到只出现一次的字母
{
if(index[i]!=-1&&index[i]<pos) //在只出现一次的字母中找出索引值最小的即可
{
pos=index[i];
}
}
}
if(pos<strlen(str))
return str[pos];
return '\0';
}

分享到:
评论

相关推荐

    数据结构-文章编辑.doc

    查找第一个字符,如果有第一个字符即p-&gt;data[i]==str[0],设计数器k=0。 2.查找这个字符后面的字符与要查找的字符串是否匹配即p- &gt;data[i+j]==str[j],如果匹配k++。 3.重复第二步,如果k=len2,则查找到,count++;...

    正则表达式30分钟入门教程

    ),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。 分枝条件 不幸的是,刚才那个表达式也能匹配010)12345678或(022-87654321这样的“不正确”的格式...

    正则表达式

    \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,...

    javascript文档

    indexOf 方法 返回在 String 对象中第一次出现子字符串的字符位置。 不相等运算符 (!=) 比较两个表达式,看是否不相等。 Infinity 属性 返回 Number.POSITIVE_INFINITY 的初始值。 input 属性 返回进行查找的...

    微软JavaScript手册

    indexOf 方法 返回在 String 对象中第一次出现子字符串的字符位置。 不相等运算符 (!=) 比较两个表达式,看是否不相等。 Infinity 属性 返回 Number.POSITIVE_INFINITY 的初始值。 input 属性 返回进行查找的...

    JScript 语言参考

    indexOf 方法 返回在 String 对象中第一次出现子字符串的字符位置。 不相等运算符 (!=) 比较两个表达式,看是否不相等。 Infinity 属性 返回 Number.POSITIVE_INFINITY 的初始值。 input 属性 返回进行查找的...

    Lotus公式语言函数简介

    @Unique 带有参数时,通过仅返回列表里第一次出现的每个成员来从文本列表里删除重复值 @UpperCase 将指定字符串里的小写字母转换为大写 @URLGetHeader 从 URL 中返回指定的超文本传输协议 (HTTP) 的标题信息 @URL...

    华为机试华为OD机试算法题Python源码(41道).zip

    汽水瓶.py,求int型正整数在内存中存储时1的个数.py,求小球落地5次后所经历的路程和第5次反弹的高度.py,取近似值.py,删除字符串中出现次数最少的字符.py,蛇形矩阵.py,识别有效的IP地址和掩码并进行分类统计.py,输入一...

    EXCEL集成工具箱V6.0

    能将最多三个任意区域存储格(或列)的内容按自定的分隔符号连接成一个字符串写入指定的存储格或新工作表中。可以生成含重复值与不含重复值并可选是否排序的连接字符串。连接上万个字符只需短短1分钟即完成。 ...

    VBSCRIPT中文手册

    InStr 函数 返回一个字符串在另一个字符串中第一次出现的位置。 InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,...

    vb Script参考文档

    InStr 函数 返回一个字符串在另一个字符串中第一次出现的位置。 InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    EXCEL集成工具箱V8.0完整增强版(精简)

    能将最多三个任意区域存储格(或列)的内容按自定的分隔符号连接成一个字符串写入指定的存储格或新工作表中。可以生成含重复值与不含重复值并可选是否排序的连接字符串。连接上万个字符只需短短1分钟即完成。 ...

    LeetCode解题总结

    5.3.1 生成不重复的二叉查找树数目 5.3.2 验证是否为二叉查找树 5.3.3 将有序数组转为二叉树 5.3.4 将有序链表转为二叉树 5.4 二叉树的递归 5.4.1 二叉树的最大深度 5.4.2 二叉树的最小深度 5.4.3 路径和 5.4.4 满...

    EXCEL百宝箱8.0终极版

    第一参数为引用,第二参数为待替换字符串,第三参数为新字符串,第四参数用于指定替换第几次出现的字符,范围在1到256之间。 函数名称:重复 函数功能与参数:判断指定区域中是否有重复单元格的函数只有一个参数即...

    Excel公式大全操作应用实例(史上最全)

    把分散在各单元格的内容合在一个单元格中 多个工作表的单元格合并计算 【条件自定义格式】 通过条件格式将小计和总计的行设为不同的颜色 如何实现这样的条件格式 隔行不同字体颜色怎么设置 让不同类型数据用不同颜色...

    EXCEL函数公式集

    把分散在各单元格的内容合在一个单元格中 多个工作表的单元格合并计算 【条件自定义格式】 通过条件格式将小计和总计的行设为不同的颜色 如何实现这样的条件格式 隔行不同字体颜色怎么设置 让不同类型数据用不同颜色...

    我整理的VBA 自定义函数大全 共138页

    30.查找一字符串(withinstr)在另一字符串中(findstr1)中某一次(startnum)出现时的位置,返回零表示没找到。 31.增加文件路径最后的“\”符号 32.计算所得税 33.从工作表第一行的标题文字以数字形式返回所在列号 34....

    Excel百宝箱9.0无限制破解版.rar

    【清除列中重复值】:将选择中重复出现的数据删除(保留第一次出现的数据) 【禁止重复值】:可以指定某列不允许重复,指定后该列输入重复值时会自动提示 【标示重复值】:将重复出现的数据用不同颜色分别标示...

Global site tag (gtag.js) - Google Analytics