一个高中哥们,拜托我帮他写程序,鉴于他面临的挂科的风险,又加上他老师教的也不是很好。就重操旧业,来了段C++。今天发这个博客主要是把代码贴出来纪念下,同时也供写这作业的同学参考下。

程序的题目了,可高大上了,厉害的紧啊!全英文,这把我吓的,看了半天懂了,人家说有一种向量什么什么的,厉害的很,让你比较俩向量是否相等。厉害了,这是干啥呀?

看了一会懂了,从DOS界面让用户输入俩字符串,字符串内是数字,两个数字间用非数字符号隔开。也就是类似于这样的"1,2,3,1,4,5,12,154,12"。搜噶,这不就是普通的表示方法吗。当然复杂的也有"1a1s1x2s5#5^6"反正他俩数字间不是数字呗。瞧瞧,瞧瞧人家老师出的题,我们景大佬出题只会出英雄联盟人物去干嘛干嘛。渍渍渍,差距!然后嘞,你把数字提出来,如"1a1s2d5s8"就成了整型{1,1,2,5,8},变成整型了,然后比较A数组和B数组元素的映射是否相同(不计顺序)。映射不懂的话,也就是A集合和B集合是否相同。注意,集合啊!还不懂,高一重修。

欧,人家老师还说了,我要两种解决方法。渍渍渍,高大上。赶上景大佬和秦大佬了(我们江科大最好的计算机老师)。不过问题在于,你没把你的学生教会啊,这是老师最大的悲哀。渍渍渍~我这巴掌打的太重了吧。

下面讲思路:

第一种:

1. 提取出整型数组。

2.遍历检查A数组的元素是否都在B数组中。

3.遍历检查B数组的元素是否都在A数组中。

4.若以上2,3条都成立,则返回正确,否则返回错误。(其实若2,3中有一处不成立,当场就return false了,这么说是让大家容易懂)

代码如下:

#include<iostream>
using namespace std;//从这里往下是处理字符串的函数,主要是把字符串转化为整型数组
//判断是否是数字的函数
bool IsNum(char str)
{if (int(str) >= 48 && int(str) <= 57)return true;else return false;
}
//计算数组长度的函数
int Clen(string x)
{int n=0;for(int i=0;x[i]!='\0';i++){if(!IsNum(x[i])){n++;}}return n+1;
}
//将字符转化为整型
int chaToInt(char a)
{return int(a)-48;
}
//将字符串转化为整数
int strToInt(string str,int n)
{int num=0;int ten=1;for(int i=n-1;i>=0;i--){num=num+chaToInt(str[i])*ten;ten=ten*10;}return num;
}
//将字符串转换成整型数组的函数
void str_To_Int(string str,int *answer)
{int start = 0;int end = 0;int n=0;for (int i = 0; str[i] != '\0'; i++){if (IsNum(str[i])){end++;}else{answer[n]=strToInt(&str[start],end-start);n++;end++;start=end;}}answer[n]=strToInt(&str[start],end-start);
}//这是用于比较两个整型数组的函数。
/*
函数实现的功能有:
1. 判断A数组内的元素是不是都在B数组上,是则继续进行,否则返回错误
2. 判断B数组内的元素是不是都在A数组上,是返回正确,否则返回错误 */
//整型数组元素查找函数
int findNum(int *a,int len,int num,int pass=-1)
//a为数组地址。len为数组长度,num为查找数组,pass为屏蔽位,默认值为-1不屏蔽
//若查找到,则返回位置,否则返回-1
{for(int i=0;i<len;i++){if(a[i]==num&&i!=pass)return i;}return -1;
}
bool same_vec(int *a, int *b,int &len_a,int &len_b)
{for(int i=0;i<len_a;i++){if(findNum(b,len_b,a[i])==-1){return false;}}for(int i=0;i<len_b;i++){if(findNum(a,len_a,b[i])==-1){return false;}}return true;
}int main()
{//生成两个字符串指针string a;string b;//要求用户输入字符串std::cout << "请输入向量A:" << endl;std::cin >> a;std::cout << "请输入向量B:" << endl;std::cin >> b;//对字符串进行处理int len_a = Clen(a);int * answer_a = new int[len_a];str_To_Int(a,answer_a);int len_b = Clen(b);int * answer_b = new int[len_b];str_To_Int(b,answer_b);bool x=same_vec(answer_a,answer_b,len_a,len_b);if(x){cout<<"两向量相同"<<endl;}else{cout<<"两向量不同"<<endl;}delete answer_a;
    delete answer_b;return 0;
}

第二种思路:

1. 还是把字符串整理成数组。

2. 去除数组中重复的元素。

3. 将各自数组中元素排序。

4. 比较两个数组是否相同。

#include<iostream>
using namespace std;//从这里往下是处理字符串的函数,主要是把字符串转化为整型数组
//判断是否是数字的函数
bool IsNum(char str)
{if (int(str) >= 48 && int(str) <= 57)return true;else return false;
}
//计算数组长度的函数
int Clen(string x)
{int n=0;for(int i=0;x[i]!='\0';i++){if(!IsNum(x[i])){n++;}}return n+1;
}
//将字符转化为整型
int chaToInt(char a)
{return int(a)-48;
}
//将字符串转化为整数
int strToInt(string str,int n)
{int num=0;int ten=1;for(int i=n-1;i>=0;i--){num=num+chaToInt(str[i])*ten;ten=ten*10;}return num;
}
//将字符串转换成整型数组的函数
void str_To_Int(string str,int *answer)
{int start = 0;int end = 0;int n=0;for (int i = 0; str[i] != '\0'; i++){if (IsNum(str[i])){end++;}else{answer[n]=strToInt(&str[start],end-start);n++;end++;start=end;}}answer[n]=strToInt(&str[start],end-start);
}//这是用于比较两个整型数组的函数。
/*
函数实现的功能有:
1. 将两个整型数组进行去重(删去本数组内重复值)
2. 对去重后的两个数组做长度比较,如果长度相同,进行如下步骤,否则返回错误。
3. 将两个数组内元素从小到大排序。
4. 依次判断两个数组相同位置上的元素是否相同,否则报错。
*/
//整型数组元素查找函数
int findNum(int *a,int len,int num,int pass=-1)
//a为数组地址。len为数组长度,num为查找数组,pass为屏蔽位,默认值为-1不屏蔽
//若查找到,则返回位置,否则返回-1
{for(int i=0;i<len;i++){if(a[i]==num&&i!=pass)return i;}return -1;
}
//删除数组某一元素
void delNum(int *a,int len,int n)
{for(int i=n;i<len-1;i++){a[i]=a[i+1];}
}
//整型数组去重函数
void IntClear(int *num,int &len)
{int x=0;for(int ii=0;ii<=len;ii++){for(int i=0;i<len;i++){x=findNum(num,len,num[i],i);if(x!=-1){delNum(num,len,x);len--;}}}
}
//数组排序函数
void rankNum(int *a,int len)
{int x=0;for(int i=0;i<len;i++){for(int ii=0;ii<len-1;ii++){if(a[ii]>a[ii+1]){x=a[ii];a[ii]=a[ii+1];a[ii+1]=x;}}}
}
//判断两个数组内容是否相同
bool NumSame(int *a,int *b,int len)
{for(int i=0;i<len;i++){if(a[i]!=b[i]){return false;}}return true;
}
bool same_vec(int *a, int *b,int &len_a,int &len_b)
{IntClear(a,len_a);IntClear(b,len_b);if(len_a!=len_b)return false;rankNum(a,len_a);rankNum(b,len_b);if(NumSame(a,b,len_a))return true;else{return false;}
}int main()
{//生成两个字符串指针string a;string b;//要求用户输入字符串std::cout << "请输入向量A:" << endl;std::cin >> a;std::cout << "请输入向量B:" << endl;std::cin >> b;//对字符串进行处理int len_a = Clen(a);int * answer_a = new int[len_a];str_To_Int(a,answer_a);int len_b = Clen(b);int * answer_b = new int[len_b];str_To_Int(b,answer_b);bool x=same_vec(answer_a,answer_b,len_a,len_b);if(x){cout<<"两向量相同"<<endl;}else{cout<<"两向量不同"<<endl;}delete answer_a;delete answer_b;return 0;
}

power by 天域至尊

转载请注明出处及作者。

环境:DEV C++ 5.4.0

判断两个字符串内数字是否相同,向量相同的C++程序。相关推荐

  1. 浙大python判断两个字符串是否为变位词_算法2----------变位词

    1.背景: 变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary. 题1:判断两个字符串s1和s2是否为变位词. 经典的字符串变位词检测问题是比较不 ...

  2. 第六周作业(等值字串,KMP匹配,大整数相乘,最长公共子串,判断两个字符串是否匹配,最长回文子串,年号字串)

    目录 1.等值字串 2.KMP匹配 3.大整数相乘 4.最长公共子串 5.判断两个字符串是否匹配 6.最长回文字串 7.年号字串 补发一下,原来忘记发了. 1.等值字串 [问题描述]如果字符串的一个子 ...

  3. ==和equals判断两个字符串是否相等

    资料 java 判断两个字符串相等 深入理解Java中的String 本质区别 == 基本int类型,直接比较, 引用类型,比较地址. 一 "==" "=="比 ...

  4. php 字符串不相等判断,php简单判断两个字符串是否相等的方法

    php简单判断两个字符串是否相等的方法 本文实例讲述了php简单判断两个字符串是否相等的方法.分享给大家供大家参考.具体实现方法如下: function strcomp($str1,$str2){ i ...

  5. js 判断两个字符串是否相等(有两种方法)

    使用比较运算符判断两个字符串是否相等 可以使用比较运算符 === 或 == 来判断两个字符串是否相等.例如: const str1 = 'apple' const str2 = 'apple'if ( ...

  6. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同

    原标题:python怎样判断两个字符串是否相同 python中,判断两个字符串是否相等或一样,可以使用==或者is来判断:判断不一样可以使用 is not. 示例 使用注意事项 1.有时候两个字符串打 ...

  7. 判断两个字符串是否是变形词

    问题: 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词.请实现函数判断两个字符串是否互为变形词. 举例: s ...

  8. 算法2:判断两个字符串内容是否相同

    详细描述 判断两个字符串的内容是否相同,指的是两个字符串中的字符是否完全一样,顺序可以不同(也可以称之为换位字符串).比如字符串1为"abc",字符串2为"cba&quo ...

  9. java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

    ·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnc ...

最新文章

  1. 提高工作效率:15个有用的项目管理工具
  2. 【机器学习基石笔记】二、感知机
  3. java泛型方法无参_从头再来:Java泛型(开发必须知道的)
  4. 【其他】文件头注释、函数头注释、全局变量注释规范
  5. Android开发学习之基于ViewPager实现Gallery画廊效果
  6. 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-2 动画过渡
  7. ENVI5.3.1使用Landsat 8影像进行典型地物光谱简单分析实例操作
  8. HTTP报文字段说明
  9. IOS 隐藏app图标
  10. 一个c语言程序多个源文件,链接多个C源文件
  11. JavaEE项目的三层架构
  12. jdk版本升级或降级
  13. 企业级shel高级l常用命令
  14. 如果字符串是科学:如123213e21,转化为字符串
  15. 被称为世上最经典的25句话
  16. 想成为优秀的程序员这些码德不能缺
  17. C#开发简单绘图工具
  18. android studio 设备调试及Logcat查看
  19. img 图片自适应大小
  20. 数据元素、数据项、组合项、数据结构

热门文章

  1. Halo中的快速傅里叶(逆)变换算法(I)FFT
  2. java调用腾讯会议api,开会录制问题
  3. 3dsmax 模型创建+原生贴图(多图)
  4. Arduino UNO的线路跟随机器人车,L298N驱动器,红外传感器
  5. 柏格理的故事——那些伟大的灵魂【转】
  6. Boost.Asio,libevent和ACE之间关于Socket编程的比较(★firecat推荐★)
  7. C语言连接两个字符串
  8. 银行计算机专业待遇,计算机专业能报考银行哪些岗位
  9. PADS VX2.8 快速设置网络类的方法
  10. 支付宝沙箱版接入html