C pta实验十一 串

目录

6-1 字符串的长度

6-2 字符串的联接(复合加赋值) 

6-3 字符串的比较


6-1 字符串的长度

C 语言标准函数库中包括 strlen 函数,用于计算字符串的长度。作为练习,我们自己编写一个功能与之相同的函数。

函数原型

int StrLen(const char *str);

说明:str 为串的起始地址,从该地址开始连续存储串中的字符,并以字符 '\0' 作为结束标记。函数值为串的长度,即串中字符(不包括结束标记)的总数。

裁判程序

#include <stdio.h>

int StrLen(const char *str);

int main()
{
    char s[1024];
    int n;
    gets(s);
    n = StrLen(s);
    printf("%d\n", n);
    return 0;
}

/* 你提交的代码将被嵌在这里 */
输入样例:
abcd
输出样例:
4
int StrLen(const char *str)
{
	int k = 0;
	for(int i = 0; str[i] != '\0'; i++) 
	{
		k++;
	}
	return k;
} 

6-2 字符串的联接(复合加赋值) 

C语言标准函数库中包括 strcat 函数,用于字符串联接(复合加赋值)。作为练习,我们自己编写一个功能与之相同的函数。

函数原型

char* StrCat(char *dst, const char *src);

char* StrCat(char *dst, const char *src);

说明:src 为源串的起始地址,dst 为目的串起始地址。函数将 src 串添加到 dst 串末尾,函数值为 dst。

裁判程序

#include <stdio.h>
#include <string.h>

......

char* StrCat(char *dst, const char *src);

int main()
{
    char a[1024], b[1024], c[1024];
    gets(a);
    gets(b);
    gets(c);
    StrCat(a, StrCat(b, c));
    puts(a);
    puts(b);
    puts(c);
    return 0;
}

......

/* 你提交的代码将被嵌在这里 */
输入样例:
abc
de
f
输出样例:
abcdef
def
f
int StrLen(const char *str)
{
	int k = 0;
	for(int i = 0; str[i] != '\0'; i++) // C语言字符串最后一个字符就是'\0' 所以到了这里就可以终止了
	{
		k++;
	}
	return k;
} 

6-3 字符串的比较

C 语言标准函数库中包括 strcmp 函数,用于字符串的比较。作为练习,我们自己编写一个功能与之相同的函数。

函数原型

int StrCmp(const char *str1, const char *str2);

说明:str1 和 str2 分别为两个字符串的起始地址。按字典排序法,若 str1 串值大于 str2,则函数值为正整数;若 str1 串值小于 str2,则函数值为负整数;若 str1 串值与 str2 相等,则函数值为零。

裁判程序

#include <stdio.h>

......

int StrCmp(const char *str1, const char *str2);

int main()
{
    char a[1024], b[1024];
    int r;
    gets(a);
    gets(b);
    r = StrCmp(a, b);
    if (r > 0)
    {
        puts("a > b");
    }
    else if (r < 0)
    {
        puts("a < b");
    }
    else // r == 0
    {
        puts("a == b");
    }
    return 0;
}

......

/* 你提交的代码将被嵌在这里 */
输入样例1:
stock
stack
输出样例1:
a > b

输入样例2:
be
bed
输出样例2:
a < b

输入样例3:
heart
heart
输出样例3:
a == b

int StrCmp(const char *str1, const char *str2) 
{
	int flag = 1;
	int k;
	while (*str1 == *str2 && flag == 1) 
    // flag用于记录是否要退出循环 首先是比较两个字符串相同的部分
	{
		if(*str1 == '\0') // 当字符串遍历完了之后 flag=0然后跳出循环
		{
			k = 0;
			flag = 0;
		}
		else
		{
			str1++;
			str2++;
		}
	}
	if(*str1 != *str2) // 最后比较不同的部分 部分部分的字符编码谁大一些
	{
		k = *str1 - *str2;	
	}
	return k;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星辰微澜316

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值