题目1199:找位置

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2645

解决:1286

题目描述:

对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12
输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

输入:

输入包括一个由字母和数字组成的字符串,其长度不超过100。

输出:

可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。

样例输入:
abcaaAB12ab12
样例输出:
a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12
提示:

1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。

来源:
2005年华中科技大学计算机保研机试真题
不想多说,考试时没时间来想,我用了三个数组,一个用来存字母的位置,一个用来存字母出现的次数,一个是用来在输出时判断是否在前面已经输出过该字母位置(做标记的)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#include<cstring>
using namespace std;
int main()
{
char str[];
while(~scanf("%s",str))
{
int a[][],b[],p=,flag[];
memset(b,,sizeof(b));
memset(flag,,sizeof(flag));
for(int i=;i<strlen(str);i++)
{
a[str[i]-''][b[str[i]-'']++] = i;//a数组记录字母每次出现的位置,b数组记录出现过的次数
}
for(int i=;i<strlen(str);i++)
{
if(b[str[i]-'']>=&&flag[str[i]-'']==)
{
flag[str[i]-'']=;//此时该字母的位置已经输出,标记数组记为1,下次不会再进入此循环
for(int j=;j<b[str[i]-''];j++)
{
if(j!=b[str[i]-'']-)
printf("%c:%d,",str[i],a[str[i]-''][j]);
else printf("%c:%d\n",str[i],a[str[i]-''][j]);
}
}
}
}
return ;
}

最新文章

  1. Android客户端token简介和简单应用
  2. vs2010中的快捷键
  3. 九度OJ 1056--最大公约数 1439--Least Common Multiple 【辗转相除法】
  4. java程序员入门:英语好不好对编程到底有没有影响
  5. Rxjava学习小记
  6. 用正则表达式(regex)匹配多项式(polynomial)
  7. python+selenium自动化测试_1
  8. python 爬取可用
  9. Vivado中VIO核使用
  10. Hibernate中get()和load()方法区别
  11. POJ 1679 The Unique MST (次小生成树kruskal算法)
  12. screen.height &amp;&amp; screen.width
  13. lua工具库penlight--09技术选择
  14. Java-工程中常用的程序片段
  15. leetcode 31. Next Permutation JAVA
  16. 【bzoj2073】[POI2004]PRZ 状态压缩dp
  17. SpringBoot | 第三十一章:MongoDB的集成和使用
  18. vue项目中引入element-ui时,如何更改主题色
  19. IAT Hook
  20. poj 3278 Catch That Cow-搜索进阶-暑假集训

热门文章

  1. C++虚函数的工作原理
  2. JDBC连接池-C3P0连接
  3. istio入门教程
  4. 微信小程序的视图与渲染
  5. 前端插件之Datatables使用--上篇
  6. SVG和canvas渲染的性能比较
  7. loadrunner中的ie浏览器无法使用
  8. 【linux】【qt5界面】【系统托盘图标的实现】
  9. 谷歌hack
  10. loging日志的使用