//返回
第一题
//编写函数 void f(char str[80])要求将字符串中所有数字字符前加一个‘*’,例如输入:g5f78t5f. 输出 g*5f*7*8t*5f
/*****************************************************************/
#include <stdio.h>
#include <string.h>
void f(char str[80]) {
int len = strlen(str); //获取字符串长度
for (int i = len - 1; i >= 0; i--) { //从后往前遍历字符串
if (str[i] >= '0' && str[i] <= '9') { //如果是数字字符
for (int j = len; j >= i; j--) { //将后面的字符后移一位
str[j + 1] = str[j];
}
str[i] = '*'; //在数字字符前加一个‘*’
len++; //更新字符串长度
}
}
}
int main() {
char s[80];
printf("请输入一个字符串:\n");
scanf("%s", s);
f(s);
printf("输出结果为:\n");
printf("%s\n", s);
return 0;
}
第二题
//编写函数 int f(char str[])要求将字符串中所有数字字符识别出来,然后构造成一个数返回
/*****************************************************************/
#include <stdio.h>
int f(char str[]) {
int num = 0; //用来存储结果
int flag = 0; //用来标记是否遇到过数字字符
for (int i = 0; str[i] != '\0'; i++) { //遍历字符串
if (str[i] >= '0' && str[i] <= '9') { //如果是数字字符
num = num * 10 + (str[i] - '0'); //将其加到结果中
flag = 1; //标记为已遇到数字字符
} else if (flag == 1) { //如果不是数字字符,且已经遇到过数字字符
continue; //结束循环
}
}
return num; //返回结果
}
int main() {
char s[80];
printf("请输入一个字符串:\n");
scanf("%s", s);
int res = f(s);
printf("输出结果为:\n");
printf("%d\n", res);
return 0;
}
第三题
//编写函数 void f(int a[],int n),要求最大的与第一个交换,最小的与最后一个交换
/*****************************************************************/
#include <stdio.h>
void f(int a[], int n) {
int max = a[0]; //用来存储最大值
int min = a[0]; //用来存储最小值
int max_index = 0; //用来存储最大值的下标
int min_index = 0; //用来存储最小值的下标
for (int i = 1; i < n; i++) { //遍历数组
if (a[i] > max) { //如果当前元素大于最大值
max = a[i]; //更新最大值
max_index = i; //更新最大值的下标
}
if (a[i] < min) { //如果当前元素小于最小值
min = a[i]; //更新最小值
min_index = i; //更新最小值的下标
}
}
//交换最大值和第一个元素
int temp = a[0];
a[0] = max;
a[max_index] = temp;
//交换最小值和最后一个元素
temp = a[n - 1];
a[n - 1] = min;
a[min_index] = temp;
}
int main() {
int arr[] = {5, 3, 8, 2, 6, 9, 1, 4, 7};
int len = sizeof(arr) / sizeof(arr[0]); //计算数组长度
printf("原数组为:\n");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
f(arr, len); //调用函数
printf("交换后的数组为:\n");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
第四题
//编写函数 void f(char *str),通过指针实现将字符串反向
/*****************************************************************/
#include <stdio.h>
#include <string.h>
void f(char *str) {
int len = strlen(str); //获取字符串长度
char *p1 = str; //指向字符串首元素的指针
char *p2 = str + len - 1; //指向字符串尾元素的指针
while (p1 < p2) { //当两个指针没有相遇时
char temp = *p1; //交换两个指针所指向的字符
*p1 = *p2;
*p2 = temp;
p1++; //将首指针后移一位
p2--; //将尾指针前移一位
}
}
int main() {
char s[80];
printf("请输入一个字符串:\n");
scanf("%s", s);
f(s); //调用函数
printf("输出结果为:\n");
printf("%s\n", s);
return 0;
}
第五题
//5、 编写函数 实现一个英文句子按单词逆序存放的功能,如:this is an book 结果为book an is this(难度:较高)
/*****************************************************************/
#include <stdio.h>
#include <string.h>
void reverse(char *str, int start, int end) {
//反转字符串中指定区间的字符
char *p1 = str + start; //指向区间首元素的指针
char *p2 = str + end; //指向区间尾元素的指针
while (p1 < p2) { //当两个指针没有相遇时
char temp = *p1; //交换两个指针所指向的字符
*p1 = *p2;
*p2 = temp;
p1++; //将首指针后移一位
p2--; //将尾指针前移一位
}
}
void f(char *str) {
int len = strlen(str); //获取字符串长度
reverse(str, 0, len - 1); //先反转整个字符串
int start = 0; //用来记录单词的起始位置
for (int i = 0; i <= len; i++) { //遍历字符串
if (str[i] == ' ' || str[i] == '\0') { //如果遇到空格或结束符
reverse(str, start, i - 1); //反转当前单词
start = i + 1; //更新下一个单词的起始位置
}
}
}
int main() {
char s[80];
printf("请输入一个英文句子:\n");
gets(s); //输入一个英文句子,注意不能用scanf,因为它会遇到空格就停止输入
f(s); //调用函数
printf("输出结果为:\n");
printf("%s\n", s);
return 0;
}