xdoj 找位置

该篇文章介绍了如何使用C语言编写程序,通过哈希表来查找给定字符串中的重复字符及其出现位置,以ASCII码作为哈希函数,展示了从输入到输出的具体步骤。
摘要由CSDN通过智能技术生成

题目: 找位置

问题描述

对给定的一个字符串,找出有重复的字符,并给出其位置。

输入格式

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

输出格式

可能有多组测试数据,对于每组数据,

按照样例输出的格式将字符出现的位置标出。

1、下标从0开始。

2、相同的字母在一行表示出其出现过的位置。

样例输入

abcaaAB12ab12

样例输出

a:0,a:3,a:4,a:9

b:1,b:10

1:7,1:11

2:8,2:12

样例说明

给定字符串中重复的字母有a,b,1,2,依次输出上述每个字母在字符串中的全部位置。

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

typedef struct Hash
{
	int flag;//记录出现次数
	int index[100];//记录出现位置
}Hash;

int main()
{
	int i, j;
	char s[100];
	Hash hash[128];//用Ascll码表做哈希函数
	scanf("%s", s);
	for (i = 0; i < 128; i++)//初始化哈希表
	{
		hash[i].flag = 0;
		for (j = 0; j < strlen(s); j++)
			hash[i].index[j] = 0;
	}
	for (i = 0; i < strlen(s); i++)//遍历字符串构建哈希表
	{
		hash[s[i]].flag++;
		hash[s[i]].index[i]++;
	}
	for (i = 0; i < strlen(s); i++)//遍历字符串输出,题目明显是根据字符出现的先后顺序来输出的
	{
		if (hash[s[i]].flag > 1)//出现不止一次
		{
			for (j = 0; j < strlen(s); j++)
			{
				if (hash[s[i]].index[j] != 0)//这个字符的下标就是index的数组不为零位置的下标
				{
					printf("%c:%d", s[i], j);
					j++;
					break;
				}
			}
			for (; j < strlen(s); j++)
			{
				if (hash[s[i]].index[j] != 0)
				{
					printf(",%c:%d", s[i], j);
				}
			}
			printf("\n");
			hash[s[i]].flag = 0;//同一字符输出一次就作废
		}
	}
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值