ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

XDOJ 333 找位置

2022-01-01 22:33:19  阅读:165  来源: 互联网

标签:字符 ++ 位置 333 XDOJ add num str data


  1. 题目: 找位置

    问题描述

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

    输入格式

    输入包括一个由字母和数字组成的字符串,其长度不超过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,依次输出上述每个字母在字符串中的全部位置。

  2. 思路建立所有包含可能字符的结构体数组,遍历字符串并修改结构体数组中关于字符个数和位置的成员变量,最后按格式输出结果。
  3. 代码
    #include<iostream>
    #include<string>
    #include<queue>
    using namespace std;
    typedef struct{
    	int mark;  //字符的ASCII码 
    	int num;  //字符的个数
    	queue<int> add;  //队列储存字符的位置
    }Char;
    
    Char data[62];
    
    void init(){//初始化,放入0-9,A-Z,a-z; 
    	int i;
    	for(i = 0;i < 10;i++){
    		data[i].mark = '0'+i;
    		data[i].num = 0;
    	}
    	for(i = 10;i < 62;i++){
    		data[i].mark = 'A'+i;
    		data[i+26].mark = 'a'+i;
    		data[i].num = data[i+26].num = 0;
    	} 
    }
    
    int main(){
    	init();
    	string str;
    	cin>>str; 
    	int i,k;
    	for(i = 0;i < str.size();i++){
    		if(str[i] < 'A'){
    			k = str[i] - '0';	
    		} 
    		else if(str[i] < 'a'){
    			k = str[i] - 'A' + 10;
    		}
    		else if(str[i] > 'Z'){
    			k = str[i] - 'a' + 36;
    		}
    		data[k].num++;
    		data[k].add.push(i);
    	}
    	
    	for(i = 0;i < str.size();i++){
    		if(str[i] < 'A'){
    			k = str[i] - '0';	
    		} 
    		else if(str[i] < 'a'){
    			k = str[i] - 'A' + 10;
    		}
    		else if(str[i] > 'Z'){
    			k = str[i] - 'a' + 36;
    		}
    		if(data[k].add.size() > 1){//当字符有重复时输出,输出后该字符的储存位置的队列清空了
    			while(!data[k].add.empty() && data[k].add.size() > 1){
    				cout<<str[i]<<':'<<data[k].add.front()<<',';
    				data[k].add.pop();
    			}
    			cout<<str[i]<<':'<<data[k].add.front()<<endl;
    			data[k].add.pop();
    		}
    	}
    	return 0;
    }
  4. Tip:ASCII码中大写字母在小写字母前面排着。

标签:字符,++,位置,333,XDOJ,add,num,str,data
来源: https://www.cnblogs.com/the-odyssey/p/15756300.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有