8.26 PTA练习

实验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

代码:

#include
void delchar( char *str, char c )
{
    int i,j;
    int len=strlen(str);
    for(i=0;i

实验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

法一:

#include
void strmcpy( char *t, int m, char *s )
{
    int len=strlen(t),i;
    if(m>len)
        *s=NULL;
    else
    {
        for(i=m-1;i

 法二:

void strmcpy(char* t, int m, char* s)
{
    int i = m - 1, j = 0;
    while (t[i] != '\0')
    {
        s[j++] = t[i];
        i++;
    }
    s[j] = '\0';
    return s;
}


实验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 )
{
    int len1=strlen(s);
    int len2=strlen(t);
    int i,j=0;
    for(i=len1;i

 实验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 len=0;
    long int i,item;
    if(x<0)
    {
        x=-x;
        *p='-';
        len++;
    }
    if(x==0)
        *p='0';
    for(item=x;item>0;item/=16)
        len++;
    for(i=0;i<10;i++)
    {
        item=x%16;
        x/=16;
        if(item<10)
            *(p+len-1-i)=item+'0';
        else
            *(p+len-1-i)=item-10+'A';
        if(x==0)
            break;
    }
}

 

你可能感兴趣的:(算法)