题目要求(一)
>>比较字符串
输入两个字符串,根据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----------