栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【华为机试之C++】HJ4字符串分隔

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【华为机试之C++】HJ4字符串分隔

描述

•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:

连续输入字符串(每个字符串长度小于等于100)

输出描述:

依次输出所有分割后的长度为8的新字符串

示例
输入:
abc
输出:
abc00000
思路
  1. 此类等长分割不尽问题,最常用的思路就是就除数和余数。
代码

errcode.h

#pragma once
enum {
	ERRCODE_NO_ERR = 0,
	ERRCODE_INVALID_ARGUMENT = 1,
};

StringSpliter.h

#pragma once
#include 

using namespace std;

class StringSpliter
{
public:
	virtual void input() = 0;
	virtual void process() = 0;
	virtual void output() = 0;

public:
	static shared_ptr create();
};

StringSpliterImpl.h

#pragma once

#include 
#include 
#include "StringSpliter.h"

class StringSpliterImpl : public StringSpliter
{
public:
	void input() override;
	void process() override;
	void output() override;

private:
	uint8_t verifyValidity();

public:
	StringSpliterImpl();
	~StringSpliterImpl();

private:
	string userString;
	vector strings;
	uint8_t errcode;
};

StringSpliter.cpp

#include "StringSpliterImpl.h"

shared_ptr StringSpliter::create()
{
	return dynamic_pointer_cast(make_shared());
}

StringSpliterImpl.cpp

#include 
#include "StringSpliterImpl.h"
#include "errcode.h"

void StringSpliterImpl::input()
{
	getline(cin, userString);
}

void StringSpliterImpl::process()
{
	errcode = verifyValidity();
	if (ERRCODE_NO_ERR != errcode) {
		return;
	}
	auto previousSplitePos = 0;
	auto times = userString.size()/8;
	while (times--) {
		strings.push_back(userString.substr(previousSplitePos, 8));
		previousSplitePos += 8;
	}
		

	auto sizeOfLastSegment = userString.size()%8;

	if (sizeOfLastSegment > 0) {
		string lastSegment = userString.substr(previousSplitePos);

		while (8 - sizeOfLastSegment++) {
			lastSegment += '0';
		}

		strings.push_back(lastSegment);
	}
}

void StringSpliterImpl::output()
{
	for (auto& ele:strings) {
		cout << ele << 'n';
	}
	cout << endl;
}

uint8_t StringSpliterImpl::verifyValidity()
{
	if (0 == userString.size()) {
		return ERRCODE_INVALID_ARGUMENT;
	}

	return ERRCODE_NO_ERR;
}

StringSpliterImpl::StringSpliterImpl()
	:errcode(ERRCODE_NO_ERR)
{

}

StringSpliterImpl::~StringSpliterImpl()
{

}

main.cpp

#include "StringSpliter.h"

int main(int atgc, char** argv)
{
	auto spliter = StringSpliter::create();

	spliter->input();
	spliter->process();
	spliter->output();
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942485.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号