题目1199:找位置

本文介绍了一个简单的C语言程序,用于查找字符串中重复字符的位置。通过双指针技术遍历字符串,找出所有重复出现的字符及其在字符串中的位置,并打印出来。此算法适用于初学者理解字符串操作及数组应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击打开链接

/*
	时间:2014.1.31
	目的:题目1199:找位置 http://ac.jobdu.com/problem.php?pid=1199
*/
#include <stdio.h>
#include <string.h>
int main()
{
	char str[101];
	int flag[101], i, j, k, f;
	while(gets(str))
	{
		memset(flag,0,sizeof(int)*101);
		for(i = 0;str[i];i++)
		{
			f = 0;
			if(flag[i] == 1)//如果已经标记访问过就跳过 
				continue;
			for(j = i + 1;str[j];j++)//访问指针i后的字符是否与i的字符有相同的,如果相同则输出 
			{
				if(str[j] == str[i])
				{ 
					if(f == 0)//f用来输出第一个i位置的字符 ,也表示有多个相同字符,换行时需要用 
					{
						printf("%c:%d",str[i],i);
						f = 1;//控制以后不用再输出i位置的字符 
					}
					printf(",%c:%d",str[j],j);
					flag[j] = 1;
				}	
				if(f == 1 && j == (strlen(str) - 1))//只有当有多个字符 ,且访问到最后一个字符时就换行 
					printf("\n");
			}	
			
		}
		
	}
	return 0;
}
/*
------------------
abcaaAB12ab12			思路:1. 利用两个工作指针i,j,i用来指着当前位置,j用来循环i后的字符 
a:0,a:3,a:4,a:9				  2. 
b:1,b:10
1:7,1:11
2:8,2:12
------------------
*/ 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值