问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

简述两个字符串比较算法的基本思路

发布网友 发布时间:2023-01-09 23:10

我来回答

1个回答

热心网友 时间:2023-10-24 11:06

转换并反转,字符串转换为数字并将字序反转;

(2)逐位相乘,结果存放在result_num[i+j]中;

(3)处理进位,消除多余的0;

(4)转换并反转,将计算结果转换为字符串并反转。

原博客中采用指针参数传递,字符串长度有*,改为通过string传参数,按原思路编程如下:

头文件和数据结构:

#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
struct bigcheng
{
vector<int> a;
vector<int> b;
string result_str;
};
void chartonum(string a,string b,bigcheng &tempcheng);//字符串转换为数字并反转
void multiply(bigcheng &tempchengh,vector<int> &result_num);//逐位相乘,处理进位消除多余的0
void numtochar(bigcheng &tempcheng,vector<int> &result_num);//将计算结果转换为字符串并反转

(1)转换并反转,字符串转换为数字并将字序反转;

void chartonum(string a,string b,bigcheng &tempcheng)
{
int size_a=a.size();
int size_b=b.size();
for (int i=size_a-1;i>=0;i--)
{
tempcheng.a.push_back(a[i]-'0');
}
for (int i=size_b-1;i>=0;i--)
{
tempcheng.b.push_back(b[i]-'0');
}
}
(2)逐位相乘,结果存放在result_num[i+j]中;

(3)处理进位,消除多余的0;代码为:

void multiply(bigcheng &tempcheng,vector<int> &result_num)
{
for (unsigned int i=0;i<tempcheng.a.size();i++)
{
for (unsigned int j=0;j<tempcheng.b.size();j++)
{
result_num[i+j]+=(tempcheng.a[i])*(tempcheng.b[j]);
}
}
for (int i=result_num.size()-1;i>=0;i--)
{
if (result_num[i]!=0)
{
break;
}
else
result_num.pop_back();
}
int c=0;
for (unsigned int i=0;i<result_num.size();i++)//处理进位
{
result_num[i]+=c;
c=result_num[i]/10;
result_num[i]=result_num[i]%10;
}
if (c!=0)
{
result_num.push_back(c);
}
}
(4)转换并反转,将计算结果转换为字符串并反转。

void numtochar(bigcheng &tempcheng,vector<int> &result_num)
{ int size=result_num. www.hbbz08.com ();
for (unsigned int i=0;i<result_num.size();i++)
{
tempcheng.result_str.push_back(char(result_num[size-1-i]+'0'));
}
}

主函数为:

int main()
{
bigcheng tempcheng;
string a,b;
cin>>a>>b;
chartonum(a,b,tempcheng);
vector<int> resultnum(a.size()+b.size(),0);
multiply(tempcheng,resultnum);
numtochar(tempcheng,resultnum);
cout<<tempcheng.result_str<<endl;
system("pause");
return 0;
}

上面的思路还是很清晰的,但代码有些过长,考虑优化如下:
(1)上述思路是先转换反转,其实无需先将
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
年收入10W,买了平安的平安福,那现在能办理多大额度的信用卡呢? 在昆明补办身份证的程序是如何规定的 怎么样清洗打印机 板面的做法~ 王者荣耀 王者荣耀星耀之后的段位是什么? excel超链接打不开怎么办超链接点击失效怎么解决 EXCEL中的超链接只显示超链接文件名不显示路径 在Excel中超链接以后,当鼠标点击超链接时,下面总显示超链接地址... 上海师范大学对外汉语学院ipa国际认证协会 (急)Win7系统,已安装WPS2012个人版和Excel2007,但数据采集系统导出Exc... 新手怎么写小说赚钱 哮喘病的治疗?最便宜最有效的治疗方法? 治疗哮喘的费用一般是多少 西葫芦煎饼的具体做法是什么呢 峨眉有没有赤尾子 赤尾子鱼是保护鱼吗 真三国无双5特别版用手机玩,怎么用金手指代码 真三国无双5手机版联机卡顿怎么办 真三国无双5特别版手机版单人如何刷赤兔马 魔兽世界80级单刷最厉害的职业 如何在word中打拼音加声调 朝鲜核反应堆离咱有多远 日化和生物生产的酒精一样吗 如何管理在家办公的员工 员工居家办公管理办法 复合木地板用了几年现在走起来好像有一层胶粘住了鞋子,是怎么回事? 在草稿本上写作文格式 华为手机怎么用两个呢? 5月21日是什么节日2015年 求DNF二娘有话说。 二然电台的所有背景音乐。 不要再叫我去微博找,我找不到- - 一个一个输出来 - - 魔兽世界8? 魔兽世界动作条8无法编辑 魔兽世界8区联盟和部落哪个强 音符的拍号是什么意思 怎么输入特步真伪密码 开封朋友用得最多的是哪个团购网站? 开封有24券团购网吗? 位置在哪 怎么加入开封团购 控股51%和67%有何区别? 做爱太猛对身体有影响吗? 可口可乐和百事可乐能一起喝吗 寿险的发展历程 穿越火线在挂红手指的时候,QQ和别的游戏还能登录吗? 我其中一个QQ号,设置了密保问题可是答案忘了,申诉吧,以前玩穿越火线需要设置防沉迷,随便找的身份设置的 众投未来可靠吗 光追基本理解 指数函数的概率密度在word里怎么打 5丨自学网已注册会员如何打开教程 打印机怎么共享到局域网 现在南昌装一个有线电视机顶盒要多少钱