题目
- 编写程序,将一个字符串反向存放(编写函数实现)。
- 编写程序my_strlen(char *str),测得指定字符串的长度(编写函数实现)
- 编写一个字符串拷贝函数,my_strcpy(char *dest,char *src)(编写函数实现)
将源操作数src中的字符串拷贝到dest所指向的数组中 - 编写一个字符串连接函数,my_strcat(char *dest, char *src)(编写函数实现)
将源操作数src中的字符串连接到dest所指向的数组源字符数组尾部 - 编写函数my_strcmp(char *str1, char *str2),比较、返回两等长字符串的大小(编写函数实现)
要求相等返回0,字符串1大于字符串2返回1,字符串2大于字符串1返回-1
字符串1的第一个字母大于字符串2的第一个字母,则判定字符串1大于字符串2,相等则比较第二字母,以此类推,全部相同则判定两字符串相等 - 编写函数my_strstr(const char *haystack, const char *needle);
在父串haystack中查找needle第一次出现的起始地址,如果没有找到返回NULL,
例如:父串”asjgfsjklaejgjwfskajkgjka”中
查找子串”jg”则返回内容为: jgfskjklaejgjwajkgjka”
查找子串”fsk”则返回内容为:”fskajkgjka”
查找字符fskl则返回为NULL - 编写一个函数实现将"12345"变成十进制12345(编写函数实现)
C语言实现代码
#include<stdio.h>
//1.字符串反转
void reverse(char* ss, int ssize) {
char* p = &ss[0];
char* q = &ss[ssize - 1];
while (p < q)
{
char tmp;
tmp = *p;
*p = *q;
*q = tmp;
p++;
q--;
}
printf("---%s\n", ss);
}
//2.测量字符串长度
int my_strlen(char* ss) {
int i = 0;
char* p = ss;
while (*p != '\0')
{
p++;
i++;
}
return i;
}
//3.字符串拷贝
void my_strcpy(char* dest, char* src)
{
char* p = src;
char* q = dest;
while (*p != '\0')
{
*q = *p;
p++;
q++;
}
*q = '\0';
q = &dest[0];
printf("dest == %s\n", dest);
}
//4.字符串拼接
void my_strcat(char* dest, char* src)
{
char* p = dest;
char* q = src;
while (*p != '\0')
{
p++;
}
while (*q != '\0')
{
*p = *q;
p++;
q++;
}
*p = '\0';
printf("dest == %s\n", dest);
}
//5.字符串长度比较
int my_strcmp(char* str1, char* str2) {
char* p = str1;
char* q = str2;
while (*p != '\0' && *q != '\0')
{
p++;
q++;
}
if (*p != '\0')
return 1;
else if (*q != '\0')
return -1;
else
return 0;
}
//6.第一次出现的地址
int my_strstr(const char* haystack, const char* needle)
{
int i = 0;
const char* p = haystack;
const char* q = needle;
int needleSize = 0;
while (*q != '\0')
{
needleSize++;
q++;
}
q = needle;
char first = 0;
while (*p != '\0' && *q != '\0') {
if (*p == *q) {
p++;
q++;
first = i;
}
else {
q = needle;
p++;
first = 0;
}
i++;
}
if (*q == '\0') {
first -= needleSize;
first++;
}
if (*p == '\0' && *q != '\0')
return NULL;
return first;
}
//7.字符串转十进制整数
int transport(char* arrs) {
char* p = arrs;
int f = 0;
while (*p != '\0')
{
if (*p >= '0' && *p <= '9')
f = f * 10 + ( *p - '0');
p++;
}
return f;
}
void main()
{
char s[] = "abcde";
int ssize = sizeof(s) / sizeof(s[0]);
ssize--;
reverse(s, ssize);
//2.测量字符串长度
int l = my_strlen(s);
printf("字符串s长为 :%d\n", l);
//3.字符串拷贝
char dest[20];
char src[] = "yingzi";
my_strcpy(dest, src);
//4.字符串拼接
my_strcat(dest, src);
//5.字符串比较长度
int fin = my_strcmp(dest, src);
printf("返回 : %d\n", fin);
//6.第一次出现地址
char haystack[] = "qwedsa123asdf";
char needle[] = "123asdf";
int first = my_strstr(haystack,needle);
char* aa = haystack + first;
//printf("第一次出现的位置为 : %d\n", first);
printf("%s\n", aa);
//7.字符串转十进制数
int f;
char arr[] = "123654";
f = transport(arr);
printf("转换后的值为 : %d", f);
}