集美大学 - 2840 - 实验8-2 - 函数题

实验8-2-3 字符串 删除字符

本题要求实现一个删除字符串中的指定字符的简单函数。

函数接口定义:

void delchar( char *str, char c );

其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。

裁判测试程序样例:

#include 
#define MAXN 20

void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char str[MAXN], c;

    scanf("%c\n", &c);
    ReadString(str);
    delchar(str, c);
    printf("%s\n", str);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

a
happy new year

输出样例:

hppy new yer
void delchar(char *str, char c) {
    int len = 0;
    while (str[len] != '\0') {
        len++;
    }
    int cnt = 0;
    for (int i = len - 1; i >= 0; i--) {
        if (str[i] == c) {
            for (int j = i; j < len - cnt; j++) {
                str[j] = str[j + 1];
            }
            cnt++;
        }
    }
}

实验8-2-4 指针 使用函数实现字符串部分复制

本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。

函数接口定义:

void strmcpy( char *t, int m, char *s );

函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。

裁判测试程序样例:

#include 
#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;
}

/* 你的代码将被嵌在这里 */

输入样例:

7
happy new year

输出样例:

new year
void strmcpy(char *t, int m, char *s) {
    int n = strlen(t);
    if (m > n) {
        *s = NULL;
    } else {
        for (int i = 0; i <= (n - m); i++) {
            s[i] = t[m + i - 1];
        }
    }
}

实验8-2-5 指针 判断回文字符串

本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。

函数接口定义:

bool palindrome( char *s );

函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false

裁判测试程序样例:

#include 
#include 

#define MAXN 20
typedef enum {false, true} bool;

bool palindrome( char *s );

int main()
{
    char s[MAXN];
    
    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

thisistrueurtsisiht

输出样例1:

Yes
thisistrueurtsisiht

输入样例2:

thisisnottrue

输出样例2:

No
thisisnottrue
bool palindrome(char *s) {
    int j = strlen(s) / 2;
    int len = strlen(s);
    for (int i = 0; i <= j; i++) {
        if (s[i] != s[len - i - 1]) return false;
    }
    return true;
}

实验8-2-6 一维数组 分类统计各类字符个数

本题要求实现一个函数,统计给定字符串中的大写字母、小写字母、空格、数字以及其它字符各有多少。

函数接口定义:

void StringCount( char *s );

其中char *s是用户传入的字符串。函数StringCount须在一行内按照

大写字母个数 小写字母个数 空格个数 数字个数 其它字符个数

的格式输出。

裁判测试程序样例:

#include 
#define MAXS 15

void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现,略去不表 */

int main()
{
    char s[MAXS];

    ReadString(s);
    StringCount(s);

    return 0;
}

/* Your function will be put here */

输入样例:

aZ&*?
093 Az

输出样例:

2 2 1 3 4
void StringCount(char *s) {
    int da = 0, xiao = 0, kong = 0, shu = 0, qi = 0;
    for (int i = 0; s[i] != '\0'; i++) {
        if (s[i] >= 'A' && s[i] <= 'Z') da++;
        else if (s[i] >= 'a' && s[i] <= 'z') xiao++;
        else if (s[i] == ' ') kong++;
        else if (s[i] >= '0' && s[i] <= '9') shu++;
        else qi++;
    }
    printf("%d %d %d %d %d", da, xiao, kong, shu, qi);
}

实验8-2-7 指针 字符串的连接

本题要求实现一个函数,将两个字符串连接起来。

函数接口定义:

char *str_cat( char *s, char *t );

函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。

裁判测试程序样例:

#include 
#include 

#define MAXS 10

char *str_cat( char *s, char *t );

int main()
{
    char *p;
    char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
    
    scanf("%s%s", str1, str2);
    p = str_cat(str1, str2);
    printf("%s\n%s\n", p, str1);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

abc
def

输出样例:

abcdef
abcdef
char *str_cat(char *s, char *t) {
    char *p;
    p = strcat(s, t);
    return p;
}

实验8-2-9 字符串 长整数转化成16进制字符串

本题要求实现一个将长整数转化成16进制字符串的简单函数。

函数接口定义:

void f( long int x, char *p );

其中x是待转化的十进制长整数,p指向某个字符数组的首元素。函数f的功能是把转换所得的16进制字符串写入p所指向的数组。16进制的A~F为大写字母。

裁判测试程序样例:

#include 
#define MAXN 10

void f( long int x, char *p );

int main()
{
    long int x;
    char s[MAXN] = "";
    
    scanf("%ld", &x);
    f(x, s);
    printf("%s\n", s);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

123456789

输出样例1:

75BCD15

输入样例2:

-125

输出样例2:

-7D
void f(long int x, char *p) {
    int q = x;
    char a[10];
    int y;
    int i = 0, temp;
    if (x < 0) x = -x;
    while (x > 15) {
        y = x % 16;
        if (0 <= y && y <= 9) {
            a[i] = y - 1 + '1';
        } else {
            a[i] = y - 10 + 'A';
        }
        x = x / 16;
        i++;
    }
    temp = i;
    if (0 <= x && x <= 9) {
        a[i] = x - 1 + '1';
    } else {
        a[i] = x - 10 + 'A';
    }
    if (q < 0)printf("-");
    for (i = 0; i <= temp; i++) {
        p[i] = a[temp - i];
    }
}

你可能感兴趣的:(集美大学,-,2840,算法,c语言,c++)