1.字符串中的字符删除

题目:

分别用字符数组或字符指针做函数参数,在字符串中删除与某字符相同的字符。

void Delete1(char s[ ], char ch);

void Delete2(char *p, char ch);
【样例输入】

abcdabcd

c
【样例输出】

abdabd

代码:

#include <iostream>
#include <cstring>
using namespace std;void Delete(char s[ ], char ch)
{int num = strlen(s);for(int i = 0; i < num; i ++){if(s[i] == ch)s[i] = ' '; //ch已经是一个字符,不用加单引号;}
}void Delete2(char *p, char ch)
{for(; *p != '\0'; p ++) //注意\0 \0 \0 \0;可以p[i]表示数组;可以写成for(int i = 0;p[i]!='\0';i++) if(p[i] == ch) p[i] = ' ';{if(*p == ch) *p = ' ';}
}int main()
{char s[100];char c;gets(s);cin >> c;Delete2(s, c);int num = strlen(s);for(int i = 0; i < num; i ++){if(s[i] == ' ') continue;else cout << s[i];}return 0;
}

2.密码

题目:

假设一个比较安全的密码至少应该满足下面两个条件:

(1)密码长度大于等于8,且不要超过16。

(2)密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:

1.大写字母:A,B,C…Z;

2.小写字母:a,b,c…z;

3.数字:0,1,2…9;

4.特殊符号:~,!,@,#,$,%,^;

给你一个密码,你的任****务就是判断它是不是一个安全的密码。

请设计函数bool Password(char *str)实现之。

【输入形式】测试实例包含一个密码(长度最大为50),密码仅包括上面的四类字符。

【输出形式】对于测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。

【样例输入】a1b2c3d4

【样例输出】NO

【测试数据】a1b2c3d4 Aa! AAAAZZab001~~~# ~~9Bccc^ 000000000000000000000abA %""""""a12

代码:

#include <iostream>
#include <cstring>
#define N 50using namespace std;int flag =0;bool Password(char *str)
{int len = strlen(str); //直接strlen;不用取内容;bool flag1 = true, flag2 = true, flag3 = true, flag4 = true; //要注意排除出现过的类型;if(len < 8 || len > 16) return false;for(int i = 0; i < len; i ++){if(str[i] >= 'A' && str[i] <= 'Z'){if(flag1){flag += 1;flag1 = false;}}if(str[i] >= 'a' && str[i] <= 'z'){if(flag2){flag += 1;flag2 = false;}}if(str[i] >= '0' && str[i] <= '9'){if(flag3){flag += 1;flag3 = false;}}switch(str[i]){case '~':case '!':case '#':case '$':case '%':if(flag4) //都是一种情况;{flag += 1;flag4 = false;}}}if(flag >= 3)return true;else return false;
}int main()
{char s[N];gets(s);if(Password(s)) cout << "YES";else cout << "NO";
}

3.合并字符串

题目:

编写一个函数char * str_bin(char* str1, char* str2), str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重复。在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函数,最后输出合并后的结果。str_bin函数的返回值就是该结果串的起始地址。
【输入形式】分行从键盘输入两个有序字符串(不超过100个字符)
【输出形式】输出合并后的有序字符串
【输入样例】
aceg
bdfh
【输出样例】
abcdefgh
【样例说明】
输入两个有序字符串aceg和bdfh,输出合并后的有序字符串abcdefgh

代码:

#include <iostream>
#define N 101using namespace std;int len1 =0;char * str_bin(char* str1, char* str2){for(int i = 0; str1[i] != '\0'; i ++){len1 ++;}for(int i = len1, j = 0; str2[j] != '\0'; i ++, j ++){str1[i] = str2[j];len1 ++;}str1[len1] = '\0';for(int i = 0; str1[i] != '\0'; i ++){for(int j = i + 1; str1[j] != '\0'; j ++){if(str1[i] > str1[j]){char temp;temp = str1[i];str1[i] = str1[j];str1[j] = temp;}}}return str1;
}
int main()
{char str1[N];char str2[N];gets(str1);gets(str2);puts(str_bin(str1,str2)); return  0;
}

4.选择排序

题目:

定义函数void Sort(int a[],int n),用选择法对数组a中的元素升序排列。自定义main函数,并在其中调用Sort函数。

【输入形式】

首先打印提示"Input n:";然后直接在冒号后面输入正整数n,表示数据的个数;回车;

打印提示"Input array of n integers:";其中n应该用如上输入的具体的数值代替;然后直接在冒号后面连续输入n个整数数值,每个数值之间用空格隔开;回车;

【输出形式】

打印"After sorted the array is:";然后直接在冒号后面输出经升序排序后的数组序列,每个数值之间用空格隔开,第一个数值前面无空格,最后一个数值后面无空格;换行;

【运行时的输入输出样例】(下划线部分表示输入)

Input n:6

Input array of 6 integers:1 5 -9 2 4 -6

After sorted the array is:-9 -6 1 2 4 5

代码:

#include <iostream>
#define N 100
using namespace std;void Sort(int a[], int n)
{int i, j, k, temp;for(i = 0; i < n; i ++){k = i;for( j = i + 1; j < n; j ++){if(a[j] < a[k]){k = j;}}if(k != i){temp = a[i];a[i] = a[k];a[k] = temp;}}
}int main()
{int n = 0;int s[N];int i = 0;cout << "Input n:";cin >> n;cout << "Input array of n integers:";while(1){cin >> s[i];i ++;if(i == n)break;}Sort(s, n);cout << "After sorted the array is";for(int i = 0; i < n; i ++){cout << s[i] << " ";}return 0;
}

5.满足条件的整数

题目:

假设a、b、c均为整数,且满足a,b,c 大于1,并且小于等于100,找出所有符合条件:“a的平方 + b的平方 = c的平方”的整数组。

【要求】

1、编写函数void Fun(int a, int b)寻找符合条件的三个数,其中ab分别表示数据起止范围1~100。

2、编写函数void Print(int a, int b ,int c)按照规定的输出格式打印等式,由fun函数调用print函数执行输出功能。

3、主函数不允许出现循环语句,所有功能均在子函数中实现。

【输入形式】无输入
【输出形式】

按a从小到大的顺序输出所有满足条件的整数组(若a相同,则按b从小到大的顺序输出),每行一组,每一组数据的输出样式为:

3*3 + 4*4 = 5*5

注意:

1、3*3 + 4*4 = 5*5 和 4*4 + 3*3 = 5*5虽然是同一组数据,后者不需要输出;

2、加号和等号左右各有一个空格

3、9*9 + 12*12 = 15*15 (在前)

9*9 + 40*40 = 41*41 (在后)

【输出】

3*3 + 4*4 = 5*5

5*5 + 12*12 = 13*13

6*6 + 8*8 = 10*10

7*7 + 24*24 = 25*25

8*8 + 15*15 = 17*17

9*9 + 12*12 = 15*15

9*9 + 40*40 = 41*41

10*10 + 24*24 = 26*26

11*11 + 60*60 = 61*61

12*12 + 16*16 = 20*20

12*12 + 35*35 = 37*37

13*13 + 84*84 = 85*85

14*14 + 48*48 = 50*50

15*15 + 20*20 = 25*25

15*15 + 36*36 = 39*39

16*16 + 30*30 = 34*34

16*16 + 63*63 = 65*65

18*18 + 24*24 = 30*30

18*18 + 80*80 = 82*82

20*20 + 21*21 = 29*29

20*20 + 48*48 = 52*52

21*21 + 28*28 = 35*35

21*21 + 72*72 = 75*75

24*24 + 32*32 = 40*40

24*24 + 45*45 = 51*51

24*24 + 70*70 = 74*74

25*25 + 60*60 = 65*65

27*27 + 36*36 = 45*45

28*28 + 45*45 = 53*53

28*28 + 96*96 = 100*100

30*30 + 40*40 = 50*50

30*30 + 72*72 = 78*78

32*32 + 60*60 = 68*68

33*33 + 44*44 = 55*55

33*33 + 56*56 = 65*65

35*35 + 84*84 = 91*91

36*36 + 48*48 = 60*60

36*36 + 77*77 = 85*85

39*39 + 52*52 = 65*65

39*39 + 80*80 = 89*89

40*40 + 42*42 = 58*58

40*40 + 75*75 = 85*85

42*42 + 56*56 = 70*70

45*45 + 60*60 = 75*75

48*48 + 55*55 = 73*73

48*48 + 64*64 = 80*80

51*51 + 68*68 = 85*85

54*54 + 72*72 = 90*90

57*57 + 76*76 = 95*95

60*60 + 63*63 = 87*87

60*60 + 80*80 = 100*100

65*65 + 72*72 = 97*97

【提示】主函数就仅仅一条调用Fun函数的语句;Fun函数中设计三重循环,判断a*a+b*b==c*c时,且a<b时,调用Print函数执行输出,a<b可以在for里判断,也可以在输出前判断。

代码:

#include <iostream>
#include <cmath>
using namespace std;void Print(int a, int b ,int c)
{if(a < b)cout << a << '*' << a << " + " << b << '*' << b << " = " << c << '*' << c << endl; //单引号表示一个字符,输出符号加空格用双引;
}void Fun(int a, int b)
{for(int i = 1; i <= 100; i ++){for(int j = 1; j <= 100; j ++){int m = sqrt(i * i + j * j);if(m * m == i * i + j * j && m <= 100) Print(i, j, m);}}
}int main()
{int a, b;Fun(a, b);return 0;
}

6.查找元素

题目:

在数组中查找指定元素。输入一个正整数n(1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,如果找到则输出相应的最小下标,否则输出"Not found"。要求定义并调用函数int search(int list[], int n, int x),它的功能是在数组list中查找元素x,若找到则返回相应的最小下标,否则返回-1。

【输入形式】

首先打印提示"Input n:";然后直接在冒号后面输入正整数n,表示数据的个数;回车;

打印提示"Input n integers:";其中n应该用如上输入的具体的数值代替;然后直接在冒号后面连续输入n个整数数值,每个数值之间用空格隔开;回车;

打印提示"Input x:";然后直接在冒号后面输入数值x,代表查找的数值;回车;

【输出形式】

有两种情况:

如果指定的x数值在数组中查到,则输出"index = ";被找到的数值在数组中的下标值;回车;

如果指定的x数值在数组中没有查到,则输出"Not found";回车;

【运行时的输入输出样例1】(下划线部分表示输入)

Input n:3

Input 3 integers:1 2 -6

Input x:2

index = 1

【运行时的输入输出样例2】(下划线部分表示输入)

Input n:5

Input 5 integers:1 2 2 5 4

Input x:0

Not found

代码:

#include <iostream>
#define N 10
using namespace std;int flag = 0;int search(int list[], int n, int x)
{for(int i = 0; i < n; i ++){if(list[i] == x){flag = 1;return i;}}if(flag == 0)return 0;
}int main()
{int n;int s[N];int x;cout << "Input n:";do{cin >> n;}while(n <= 1 || n > 10);cout << "Input n integers:";for(int i = 0; i < n; i ++){cin >> s[i];}cout << "Input x:";cin >> x;int r = search(s, n, x);if(r == 0 && flag == 0) cout << "Not found";else cout << "index = " << r;return 0;
}

7.交换数组中最大最小元素位置

题目:

利用案例1中的swap函数,从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们在数组中的位置。

要求:1)定义swap(int *x, int *y)函数,实现两个数据的交换;

​ 2)定义函数FindMaxMinid(int arr[], int nCount, int *max_id, int *min_id),找到数组arr中最大元素和最小元素的下标;

​ 3)在main函数中实现数组的输入;调用FindMaxMinid函数;并交换两个元素的位置。
【输入形式】
【输出形式】
【样例输入】

1 2 3 4 5 6 7 8 9 10
【样例输出】

10 2 3 4 5 6 7 8 9 1

代码:

#include <iostream>
#define N 10
using namespace std;void swap(int *x, int *y)
{int temp = *x;*x = *y;*y = temp;
}void FindMaxMinid(int arr[], int nCount, int *max_id, int *min_id)
{for(int i = 0; i < nCount; i ++){if(arr[i] > max_id[0]) max_id = &arr[i]; //让指针指向最值;if(arr[i] < min_id[0]) min_id = &arr[i];}swap(max_id, min_id);
}int main()
{int s[N];for(int i = 0; i < N; i ++){cin >> s[i];}FindMaxMinid(s, N, s, s);for(int i = 0; i < N; i ++){cout << s[i] << " ";}return 0;
}

8.打印极值点下标

题目:

在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻(左边和右边)的整数,或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。

【输入形式】有2×n+1行输入:第一行是要处理的数组的个数n;对其余2×n行,第一行是此数组的元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔。

【输出形式】输出为n行:每行对应于相应数组的所有极值点下标值,下标值之间用空格分隔。

【样例输入】

3

10

10 12 12 11 11 12 23 24 12 12

15

12 12 122 112 222 211 222 221 76 36 31 234 256 76 76

15

12 14 122 112 222 222 222 221 76 36 31 234 256 76 73

【样例输出】

0 7

2 3 4 5 6 10 12

0 2 3 10 12 14

代码:

#include <iostream>
#define N 100
using namespace std;void Find(int s[], int len)
{for(int i = 0; i < len; i ++){if(i == 0 && s[i] != s[i + 1]) cout << i << " ";if(i != 0 && i != len - 2){if(s[i] < s[i + 1] && s[i] < s[i - 1]) cout << i << " ";if(s[i] > s[i + 1] && s[i] > s[i - 1]) cout << i << " ";}if(i == len - 1 && s[i] != s[i - 1]) cout << i << " ";}}int main()
{int s[N];int num = 0;cin >> num;while(num --){int len;cin >> len;for(int i = 0; i < len; i ++){cin >> s[i];}Find(s, len);}return 0;
}

9.利用指针交换两个数组中的数据并排序

题目:

编写函数int Read(int *x); 录入数组元素,返回值代表元素个数。录入数据时输入0代表数据录入的结束。

编写函数void Print(int *x, int n); 负责输出数组中的元素。

编写函数void Swap(int *x, int m, int *y, int n); 交换主函数里的两个整形数组a和b里的数据值,其中ab中数据元素的实际个数传递给形参m和n。

编写函数void Sort(int *x, int n); 负责实现数组元素从小到大的排序。

【样例输入】

9 3 2 8 5 7 0

6 1 4 0

【样例输出】

6 1 4

9 3 2 8 5 7

1 4 6

2 3 5 7 8 9

【提示】首先依次输出交换后的数组元素值,然后依次输出排序后的数组元素值。

代码:

#include <iostream>
using namespace std;int a[100];
int b[100];
int c[100];void QuickSort(int a[], int left, int right)
{if (left < right){int mid = a[(left + right) / 2];int low = left - 1;int high = right + 1;while (low < high){while (a[ ++ low] < mid);while (a[ -- high] > mid);if (low < high)swap(a[low], a[high]);}QuickSort(a, left, low - 1);QuickSort(a, high + 1, right);}
}int main()
{int ch;int pos = -1;while (cin >> ch){c[ ++ pos] = ch;}if (pos == 0) return 0;int newpos1 = 0;pos = 0;while (c[pos] != 0){a[newpos1 ++ ] = c[pos ++ ];}pos ++;int newpos2 = 0;while (c[pos] != 0){b[newpos2 ++ ] = c[pos ++ ];}for (int i = 0; i < newpos2; ++ i)cout << b[i] << " ";cout << endl;for (int i = 0; i < newpos1; ++ i)cout << a[i] << " ";QuickSort(b, 0, newpos2 - 1);QuickSort(a, 0, newpos1 - 1);cout << endl;for (int i = 0; i < newpos2; ++ i)cout << b[i] << " ";cout << endl;for (int i = 0; i < newpos1; ++i)cout << a[i] << " ";return  0;
}

10.利用指针交换两个数据

题目:

编写函数void swap(int *x, int *y); 交换主函数里的两个整形变量a和b的值。输入和输出语句都在主函数内部完成。

【样例输入】

3 4

【样例输出】

4 3

代码:

#include<iostream>
using namespace std;void swap(int *x, int *y)
{int temp = *x;*x = *y;*y = temp;
}
int main()
{int a, b;cin >> a >> b;swap(a, b);cout << a << ' ' << b;
}

欢迎提问,学弟学妹们加油~

第七周:字符串 + 数组 + 指针相关推荐

  1. c语言字符串传给swift,如何把字符串数组从 Swift 传递给 C

    作者:Natasha The Robot,原文链接,原文日期:2016-10-27 译者:BigbigChai:校对:walkingway:定稿:CMB Swift 允许我们将原生的字符串直接传递给一 ...

  2. 1. 字符串 字符串数组

    1. 字符串 #include <stdio.h>#define MSG "I am a symbolic string constant." #define MAXL ...

  3. 第七周--数据结构--队列数组

     /*    *第七周--数据结构--队列数组     *Copyright (c) 2015 烟台大学计算机与控制工程学院    *All right reserved.    *文件名称:li ...

  4. C语言编程>第七周 ⑧ 请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中。

    例题:请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中.二维数组中的数己在主函数中赋予. ...

  5. c语言实验7字符串,C语言实验六(第七章二维数组字符串数组)

    C语言实验六(第七章二维数组字符串数组) 第 1 页 共 7 页第七章二维数组.字符串数组题[书面作业] 以书面作业形式上交,2010 年 11 月 1 日课堂交三道题的源程序1. 编写一个主函数:用 ...

  6. 求行指针所指的字符串数组中长度最长的字符串所在的行下标

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p137 习题5 3.行指针ss所指字符串数组中共有M个字符串,且字符串长度<N.求ss所指字符串 ...

  7. 【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )

    文章目录 一.strcmp 函数 二.指针数组排序 ( 字符串排序 ) 二.完整代码示例 一.strcmp 函数 strcmp 是 String Compare 缩写 , 该函数用于比较两个字符串 ; ...

  8. 【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

    文章目录 一.字符串 一级指针 内存模型 1.指定大小字符数组 2.未指定大小字符数组 3.指向常量字符串的指针 4.指向堆内存的指针 一.字符串 一级指针 内存模型 #include <std ...

  9. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

最新文章

  1. Linux shell 对于文件的删除,复制,修改文件名等操作
  2. C#——判断数列是否排序
  3. 中文Ubuntu主目录下的文档文件夹改回英文
  4. 女人必知 教你认清6种隐性坏男人
  5. jinja2模板注入_Flask jinja2 模板注入思路总结
  6. jupyter kernel_如何在Jupyter笔记本中运行Scala和Spark
  7. appassembler-maven-plugin插件打包本地依赖的jar
  8. C# ListView控件用法
  9. 【图像处理】RGB各种格式
  10. 华为USG6000系列防火墙的Console密码重置过程
  11. HTML5期末大作业:影视视频网站设计——爱影评在线电影(10页面) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  12. Python + qrcode 实现文字转二维码
  13. linux系统时间编程(2) 各种时间标准GMT、UTC、世界时、TAI
  14. 王选-“从Dijkstra谈帅才的洞察力”[转]
  15. 安装batocera-linux教程_新的BATOCERA(巴托塞拉)安装方式和Windows共用硬盘双启动
  16. win10更新后 chrome内核浏览器总是打开网页一直加载 甚至打不开 解决方法
  17. 管理及使用Web系统:管理Discuz!论坛系统
  18. 从零到壹搭建一个商城架构--k8s集群安装
  19. 锐捷交换机配置MSTP以及VRRP
  20. Google推荐系统Wide Deep Learning for Recommender Systems论文翻译解读

热门文章

  1. Windows 8应用商店应用如何与Android和iPad对抗?
  2. springboot一键启动
  3. python多边形的绘制教程_绘制最新:python绘制封闭多边形教程_爱安网 LoveAn.com
  4. iptables白名单
  5. CButton类的继承+重写--本类来自孙鑫老师C++课堂
  6. python cnn 实例_在Keras中CNN联合LSTM进行分类实例
  7. 国产操作系统之凝思磐石安装
  8. 基于微信小程序和安卓的婚恋相亲app
  9. 【直达本质讲运放】运放的“第一原理”式定量分析法
  10. mysql主从服务器宕机,Mysql主从数据库配置及宕机处理