列表

详情


QR11. 身份证分组

描述

18位身份证的编码规则是:
前1、2位数字表示:所在省(直辖市、自治区)的代码
第3、4位数字表示:所在地级市(自治州)的代码
第5、6位数字表示:所在区(县、自治县、县级市)的代码;
第7—14位数字表示:出生年、月、日;
第15、16位数字表示:所在地的派出所的代码;
第17位数字表示性别:奇数表示男性,偶数表示女性;
第18位数字是校检码,用来检验身份证的正确性。
用户在输入身份证的过程中经常会输入错误,为了方便用户正确输入需要在输入过程中对用户的输入按照 6+8+4 的格式进行分组,实现一个方法接收输入过程中的身份证号,返回分组后的字符

输入描述

输入数据有多行,每一行是一个输入过程中的身份证号

输出描述

分组后的字符串

示例1

输入:

5021
502104 198803
5021041988033084
502104198803308324

输出:

5021
502104 198803
502104 19880330 84
502104 19880330 8324

原站题解

C++ 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2017-11-14

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<math.h>
#include<sys/types.h>

void disposeString(char *s);

int main (void)
{
    char buf[32] = {0};
    fgets(buf, sizeof(buf), stdin);
    disposeString(buf);
    fputs(buf, stdout);
    return 0;
}
void disposeString(char *s)
{
    char *temp = s;
    int len = strlen(s) - 1;
    char buf[32] = {0};
    int i = 0;
    while(*s)
    {
        if(i == 6|| i == 15)
        {
            buf[i++] = ' ';
        }
        if(*s == ' ')
        {
            s++;
            continue;
        }
        buf[i++] = *s++;
    }
    i = 0;
    while(buf[i])
    {
        *temp = buf[i];
        temp++;
        i++;
    }
    return;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2017-10-27

#include<iostream>
#include<stack>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<string>
#include<cmath>
#include<string>
#include<set>
using namespace std;

int main()
{
	string s;
	while (getline(cin,s))
	{
		int c = 0;
		for (int i = 0; i < s.size(); i++)
		{
			if (s[i] == ' ')
				continue;
			if (c == 6 || c == 14 || c == 18)
			{
				cout << " ";
			}
			cout << s[i];
			c++;
		}
		cout << endl;
	}
	//system("pause");
}

C++ 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2017-10-26

#include <iostream>
#include <vector>
#include <string>

using namespace std;
int main() 
{   string str1;
    vector <char>str2;
 getline(cin,str1);
 int num=str1.length();
 for(int i=0;i<num;i++)
 {char temp=str1[i];
  if(str1[i]!=' ')
 str2.push_back(temp);
 }
 int num2=str2.size();
 for(int j=0;j<num2;j++)
 {if(num2<6)
     cout<<str2[j];
  else
 {cout<<str2[j];
      if(j==5||j==13)
 cout<<" ";
 }
 }
 return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2017-10-22

#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
#include <stack>
#include<cstdio>
using namespace std;
int main()
{
	string num;
	vector<char> num2;
	getline(cin, num);
	int n = num.length();
	for (int i = 0; i < n; i++)
	{
		char tmp = num[i];
		if (num[i] != ' ')
			num2.push_back(tmp);
	}
	int n2 = num2.size();
	for (int i = 0; i < n2; i++)
	{
		cout << num2[i];
		if (i == 5 || i== 13)
			cout << " ";
	}
	return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2017-10-12

/*
编译 g++ -o test test.cpp
*/
#include <bits/stdc++.h>

using namespace std;

string s;

int main() {
    while(cin >> s) {
        if (s.length() <= 6) {
            cout << s << endl;
        } else if (s.length() <= 14) {
            cout << s.substr(0, 6) << ' ' << s.substr(6) << endl;
        } else {
            cout << s.substr(0, 6) << ' '; 
            cout << s.substr(6, 8) << ' ';
            cout << s.substr(14) << endl;
        }
        
    }
    return 0;
}

上一题