1
0
mirror of https://github.com/renbaoshuo/202401-programming-assignments.git synced 2024-12-16 15:44:39 +00:00

【实践课内】14.指针2

This commit is contained in:
Baoshuo Ren 2024-12-04 10:28:21 +08:00
parent b3f466c6ed
commit 5bc1a22c55
Failed to extract signature
8 changed files with 240 additions and 0 deletions

View File

@ -0,0 +1,12 @@
void strmcpy(char *src, int begin_idx, char *dst) {
int len = strlen(src);
begin_idx--;
for (int i = begin_idx; i < len; i++) {
*dst = src[i];
dst++;
}
*dst = '\0';
}

View File

@ -0,0 +1,46 @@
# 6-1 使用函数实现字符串部分复制
本题要求编写函数,将输入字符串$$t$$中从第$$m$$个字符开始的全部字符复制到字符串$$s$$中。
### 函数接口定义:
```c++
void strmcpy( char *t, int m, char *s );
```
函数`strmcpy`将输入字符串`char *t`中从第`m`个字符开始的全部字符复制到字符串`char *s`中。若`m`超过输入字符串的长度,则结果字符串应为空串。
### 裁判测试程序样例:
```c++
#include <stdio.h>
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
```
### 输入样例:
```in
7
happy new year
```
### 输出样例:
```out
new year
```

View File

@ -0,0 +1,4 @@
void splitfloat(float x, int *intpart, float *fracpart) {
*intpart = (int)x;
*fracpart = x - *intpart;
}

View File

@ -0,0 +1,42 @@
# 6-2 拆分实数的整数与小数部分
本题要求实现一个拆分实数的整数与小数部分的简单函数。
### 函数接口定义:
```c++
void splitfloat( float x, int *intpart, float *fracpart );
```
其中`x`是被拆分的实数0$$\le$$`x`$$<$$10000`*intpart`和`*fracpart`分别是将实数x拆分出来的整数部分与小数部分。
### 裁判测试程序样例:
```c++
#include <stdio.h>
void splitfloat( float x, int *intpart, float *fracpart );
int main()
{
float x, fracpart;
int intpart;
scanf("%f", &x);
splitfloat(x, &intpart, &fracpart);
printf("The integer part is %d\n", intpart);
printf("The fractional part is %g\n", fracpart);
return 0;
}
/* 你的代码将被嵌在这里 */
```
### 输入样例:
```in
2.718
```
### 输出样例:
```out
The integer part is 2
The fractional part is 0.718
```

View File

@ -0,0 +1,23 @@
int frequency(char* paragraph, char* from, char* to) {
int cnt = 0;
int len = strlen(paragraph);
for (int i = 0; i < len; i++) {
if (paragraph[i] == from[0]) {
int flag = 1;
for (int j = 1; from + j <= to; j++) {
if (paragraph[i + j] != from[j]) {
flag = 0;
break;
}
}
if (flag) {
cnt++;
}
}
}
return cnt;
}

View File

@ -0,0 +1,54 @@
# 6-3 存在感
给定函数 frequency 的功能是:求字符串(子串)在字符串(一个段落)中出现的次数。
### 函数接口定义:
```c
int frequency ( char* paragraph, char* from, char* to );
```
其中 paragraph指向的空间中存放着一个字符串from与to分别指向子串的第一个字符和最后一个字符。函数返回值为指定的子串在字符串中出现的次数。
### 裁判测试程序样例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int frequency ( char* paragraph, char* from, char* to );
int main()
{
int N;
char *s;
int from,to;
int freq;
scanf("%d\n",&N);
s = (char *)malloc((N+1)*sizeof(char));
gets(s);
scanf("%d %d", &from, &to);
freq = frequency ( s, s+from-1, s+to-1 );
printf("%d\n",freq);
return 0;
}
/* 您提交的代码将放置在这里 */
```
###输入格式:
第一行为一个正整数N0<N<=1000;
第二行为一个长度不超过N的可能包括空格的字符串
第三行为两个正整数,分别为子串的第一个字符和最后一个字符的在第二行的字符串中的位置(不是下标)。
### 输出格式:
一个正整数。
### 输入样例:
```in
300
The Weather Channel and weather.com provide a national and local weather forecast for cities, as well as weather radar, report and hurricane coverage.
28 30
```
### 输出样例:
```out
4
```

View File

@ -0,0 +1,24 @@
#include <stdio.h>
#include <string.h>
const char *reverse(char *s) {
int len = strlen(s);
for (int i = 0; i < len / 2; i++) {
char temp = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = temp;
}
return s;
}
int main() {
char s[25];
while (scanf("%s", s) != EOF) {
printf("%s ", reverse(s));
}
return 0;
}

View File

@ -0,0 +1,35 @@
# 7-1 单词翻转
从键盘输入一个字符串包含很多个单词。每个单词之间以1个或多个空格隔开。要求翻转每个单词但是单词在句子中的顺序不变。注意行前和行后可能有多个空格。
### 输入格式:
一个字符串包含很多个单词。每个单词之间以1个或多个空格隔开。要求翻转每个单词但是单词在句子中的顺序不变。注意行前和行后可能有多个空格。字符串总长度不超过1000单词数不超过50每个单词不超过20个字母。测试数据保证输入的字符只含英文字母和空格。
### 输出格式:
输出翻转后的字符串。每个单词之后输出一个空格。注意行前不能有多余的空格。行末只能有1个空格。
### 输入样例1:
```in
olleH dlroW
```
### 输出样例1:
```out
Hello World
```
### 输入样例2:
```in
I ma a tneduts
```
### 输出样例2:
```out
I am a student
```