0
点赞
收藏
分享

微信扫一扫

C语言基础演练(7)

题目要求(一)

>>比较字符串

输入两个字符串,根据ASCII码值比较这两个字符串的大小。

例如

输入:abc

    acb

输出:abc < acb

知识点

1.调用系统库<string.h>库函数比较字符串:strcmp(const char *s1, const char *s2);

2.调用自己实现的字符串比较函数mystrcmp(const char *s1, const char *s2),且s1和s2不允许为NULL;

3.字符串字符访问;

4.字符串表示.

代码

#include <stdio.h>
#include <string.h>
int mystrcmp(const char *s1, const char *s2);//声明

int main(void){
char a[100];
char b[100];
// gets读取字符串,必须保证字符串长度小于100。
gets(a);
gets(b);

// 调用自己实现的字符串比较函数
int res=mystrcmp(a,b);
if(res < 0)
printf("%s < %s\n", a, b);
else if(res == 0)
printf("%s = %s\n", a, b);
else if(res > 0)
printf("%s > %s\n", a, b);
return 0;
}
// s1和s2不允许为NULL
int mystrcmp(const char *s1, const char *s2){ //定义
// 比较字符串的字符大小,如果相等则一直比较下去
// 遇到任意字符串的结束,循环比较终止
while((*s1!='\0' && *s2!='\0')&&(*s1==*s2))
{
s1++;
s2++;
}
int res = *s1 -*s2;
if(res > 0)
return 1;
else if(res < 0)
return -1;
return 0;
}

运行结果

abc
acb
abc < acb

题目要求(二)

>>字符串中查找子串(两种实现)

给定字符串str1和str2,判断在str1中查找子串str2是否存在;若存在,则返回字符位置的指针,否则返回NULL。

例如

输入:str1:abcdbcebcd

    str2:bc

 输出:存在,返回指向str1中第2个字符的指针。

知识点

实现方法1:

标准库<string.h>字符串查找函数使用:char *strstr(const char *s1, const char *s2);

在s1中寻找第一次出现字符串s2的位置。若s2为空串,返回s1。

实现方法2:

自己编写函数来实现mystrstr功能。

代码一:库函数实现

#include <stdio.h>
#include <string.h>
int main(void){
char str1[100];
char str2[100];
//获取字符串str1
gets(str1);
//获取被查找的子串str2
gets(str2);

char *result = strstr(str1, str2);
// 返回str1,表明str2是空串
// 注:空串不是NULL
if(result == str1)
printf("str2是空串!\n");
else if(result == NULL)
printf("子串str2在str1中不存在!\n");
else
// 位置是指针,从0开始,因此计算后+1
printf("str2在str1中的位置是%d\n", result-str1+1);
return 0;
}

代码二:编写函数实现

#include <stdio.h>
const char *mystrstr(const char *s1, const char *s2);//声明
int main(void){
char str1[100];
char str2[100];
//获取字符串str1
gets(str1);
//获取被查找的子串str2
gets(str2);
const char *result = mystrstr(str1, str2);

// 返回str1,表明str2是空串
// 注:空串不是NULL
if(result == str1)
printf("str2是空串!\n");
else if(result == NULL)
printf("子串str2在str1中不存在!\n");
else
// 位置是指针,从0开始,因此计算后+1
printf("str2在str1中的位置是%d\n", result-str1+1);
return 0;
}

const char *mystrstr(const char *s1, const char *s2){ //定义
if(*s2 == '\0') //str2空字串的情况
return s1;

int i,j;
// 从s1中每个字符位置开始循环,直到最后一个空字符
for(i=0;*(s1+i)!='\0';i++){
// s2循环和s1开始位置比较
for(j=0;*(s2+j)!='\0';j++){
// 如果字符相等,则继续循环比较s2下一个字符
if(*(s1+i+j)==*(s2+j))
continue;
else
break;
}
// 如果s2中所有字符均能够与s1中比较相等,则找到
if(*(s2+j)=='\0')
return s1+i;
}
return NULL;
}

运行结果

abcedcbcdfgt
bc
str2在str1中的位置是2

-----------END----------


举报

相关推荐

0 条评论