本帖最后由 Guido 于 2020-11-10 10:00 编辑
1.編写以下函数,求字符串数组的长度:
int StringLength(char str[])#include<stdio.h>
int StringLength(char str[])
{
int i = 0;
while (str)
{
i++;
}
return i;
}
int main()
{
char s[32];
int a;
printf("请输入一组少于31个字符的字符串\n");
scanf_s("%s", s, sizeof(s)); //这里一定要用%s控制符,这样才能表示连续输入一串,刚开始自己用了%c出错了
a=StringLength(s);
printf("%d", a);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
2.编写以下函数,将字符串在数组内反序:
void Reverse(char str[])#include<stdio.h>
void Reverse(char str[])
{
int i=0;
int j=0;
char c;
while (str) //先计算数组中的元素个数,不包括\0
{
i++;
}
while (--i>j) // 1 2 3 4 5
{
c = str[j];
str[j] = str;
str = c;
j++;
}
}
int main()
{
char s[32];
scanf_s("%s", s, sizeof(s));
Reverse(s);
puts(s);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
3.编写以下函数,将字符串数组内的所有小写字母转为大写:
void StringUpper(char str[])
#include<stdio.h>
void StringUpper(char str[])
{
int i = 0;
while (str)
{
i++;
}
while (i--)
{
if (str >= 'a'&&str <= 'z')
{
str -= ('a' - 'A');
}
}
}
int main()
{
char s[32];
scanf_s("%s", s, sizeof(s));
StringUpper(s);
puts(s);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
4.编写以下函数,将带入的n个数组元素按从小到大排序:。
void Sort(int array[],int n)
逆向学习第14天_字符数组代码练习及多种冒泡排序法
#include<stdio.h>
#include<stdlib.h>
void Sort(int s[], int len)
{
int j = 0;
int t;
while (--len)
{
j = 0;
while (j<len)
{
if (s[j] > s[j + 1])
{
t = s[j];
s[j] = s[j + 1];
s[j + 1] = t;
}
j++;
}
}
}
int main()
{
int a[10] = {1,3,2,4,5,0,123,3,0,9};
int len=_countof(a);
Sort(a,len);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
逆向学习第14天_字符数组代码练习及多种冒泡排序法
//由小到大排列,从右边推到左边
#include<stdio.h>
void sort2(int p[], int nLen)
{
int i = 0;
int t = 0;
int j = nLen-1;
int k = -1;
while (j)
{
i = nLen-1;
++k; //设置k是为了限制内层循环的次数
while (i>k) //内存循环
{
if (p < p[i - 1])
{
t = p;
p = p[i - 1];
p[i - 1] = t;
}
i--;
}
j--;
}
}
int main()
{
int a[] = { 9,8,7,6,5,4,3,2,1,0 };
int b = 10;
sort2(a, b);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
5.编写4种置泡排序函数,使用数组作参数:分别将最大值最小值推回头部或尾部。
(在main函数或全局区定义一个数组,作为实际参数调用4种排序函数进行测试)
注意:数组在做实际参数时,在被调函数中不能通过sizeof或者countof来测量元素个数;
因此,每个排序函数中要将数组的元素个数通过参数传递到被调函数;
例如:
void sort1(int p[],int nLen)
void sort2(int p[],int nLen)
void sort3(int p[],int nLen)
void sort4(int p[],int nLen)
.......
//由小到大排列,从左边推到右边
#include<stdio.h>
void sort1(int p[], int nLen)
{
int i = 0;
int t = 0;
while (--nLen) //外层循环一定要先自身减减,因为数组下标是从0开始的
{
i = 0;
while (i < nLen) //内存循环
{
if (p > p[i + 1])
{
t = p;
p = p[i + 1];
p[i + 1] = t;
}
i++;
}
}
}
int main()
{
int a[] = { 9,9,7,6,5,4,3,2,1,0 };
int b = 10;
sort1(a, b);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
//由大到小排列,从左边推到右边
#include<stdio.h>
void sort1(int p[], int nLen)
{
int i = 0;
int t = 0;
while (--nLen) //外层循环一定要先自身减减,因为数组下标是从0开始的
{
i = 0;
while (i < nLen) //内存循环
{
if (p < p[i + 1])
{
t = p;
p = p[i + 1];
p[i + 1] = t;
}
i++;
}
}
}
int main()
{
int a[] = { 0,1,2,3,4,5,6,7,8,9 };
int b = 10;
sort1(a, b);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
//由大到小排列,从右边推到左边
#include<stdio.h>
void sort2(int p[], int nLen)
{
int i = 0;
int t = 0;
int j = nLen-1;
int k = -1;
while (j)
{
i = nLen-1;
++k; //设置k是为了限制内层循环的次数
while (i>k) //内存循环
{
if (p > p[i - 1])
{
t = p;
p = p[i - 1];
p[i - 1] = t;
}
i--;
}
j--;
}
}
int main()
{
int a[] = { 0,1,2,3,4,5,6,7,8,9 };
int b = 10;
sort2(a, b);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
6.编写一个函数在字符串内查找一个字符:
int StringFind(char str[],char c)
查找不到就返回-1:
查找到学符串内包含这个字符,返回的是0到n的数字。
代表这个学符距离字符串头的相对位置,如果字符串第一个元素就是要查找的字符返回0。
在main函数中定义一个学符串数组,输入一些文学后调用查找函数测试。
//查找某一个字符串中是否包含某个字符,存在则返回所在位置,不存在这返回-1
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int StringFind(char str[], char c)
{
int i = 0;
while (str)
{
if (str == c)
{
printf("\n%c在字符串%s中的位置为%d", c, str, i);
return i;
}
i++;
}
return -1;
}
int main()
{
char str[32];
char c;
int a;
printf("请输入小于32个字符的字符串\n");
scanf_s("%s", str, sizeof(str));
printf("请输入想要查找的字符\n");
fflush(stdin);
c = getchar();
a=StringFind(str, c);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
7.编写函数:
void StringUpper(char str[])
void StringLower(char str[])
在main函数中定义一个字符串数组,输入一些文字后调以上两个函数:
将实际参数内的文字全部变成大写或者小写。
#include<stdio.h>
void StringLower(char str[])
{
int i = 0;
while (str)
{
i++;
}
while (i--)
{
if (str >= 'A'&&str <= 'Z')
{
str += ('a' - 'A');
}
}
}
int main()
{
char s[32];
scanf_s("%s", s, sizeof(s));
StringLower (s);
puts(s);
return 0;
}
逆向学习第14天_字符数组代码练习及多种冒泡排序法
8.阅读翻译以下字符串操作函数,
strlen
逆向学习第14天_字符数组代码练习及多种冒泡排序法
strcpy
逆向学习第14天_字符数组代码练习及多种冒泡排序法
strcat
逆向学习第14天_字符数组代码练习及多种冒泡排序法
strcmp
逆向学习第14天_字符数组代码练习及多种冒泡排序法
strstr
逆向学习第14天_字符数组代码练习及多种冒泡排序法
strtok
逆向学习第14天_字符数组代码练习及多种冒泡排序法
strupr
逆向学习第14天_字符数组代码练习及多种冒泡排序法
strlwr
逆向学习第14天_字符数组代码练习及多种冒泡排序法
strchr
逆向学习第14天_字符数组代码练习及多种冒泡排序法
仔细测试这些函数的功能,思考自己能否编写代码实现以上函数的功能。
|