目录
1. 计算字符串的长度
#include<stdio.h>
int my_strlen(char *str)
{
int len = 0 ;
while(*str != '\0')
{
len++;
str++;
}
return len;
}
int main()
{
char a[3] = {'1','2'};
printf("%d\n",my_strlen(a));
}
2.字符串 查找
#include<stdio.h>
#include<string.h>
// 字符串 查找
char *my_strstr(char *dest, char *src)
{
int len = strlen(src);
while (*dest != '\0' )
{
if(!strncmp(dest, src, len))
{
return dest;
}
dest++;
}
return NULL;
}
int main()
{
char *dest = "I love China";
char *sub = "love";
printf("%s\n", my_strstr(dest, sub));
return 0;
}
3.字符逆序 单词逆序
请编写一个C函数,该函数将一个字符串逆序
编写一个C函数, 将”I am from shanghai!”倒置为”shanghai! from am I”, 及将句子中的单词位置倒置,而 不改变单词内部结构.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*字符串逆序 单词 句子 逆序*/
int str_word_len(char *str) //测 单词长度
{
int total = 0;
while(*str != '\0' && *str != ' ')
{
total++;
str++;
}
return total;
}
char *str_reverse0(char *str) // 下标
{
char tmp;
int i;
int len = strlen(str);
for(i = 0 ; i < len/2 ; i++)
{
tmp = str[i];
str[i] = str[len - 1 - i];
str[len -1 - i] = tmp;
}
return str;
}
char *str_reverse(char *str, int len) // 下标
{
char tmp;
int i;
for(i = 0 ; i < len/2 ; i++)
{
tmp = str[i];
str[i] = str[len - 1 - i];
str[len -1 - i] = tmp;
}
return str;
}
char *str_reverse2(char *str) // 指针
{
char tmp;
char *begin = str;
int len = strlen(str);
char *end = str + len -1;
while(begin < end)
{
tmp = *begin;
*begin = *end;
*end = tmp;
begin++;
end--;
}
}
char *reverse_setence(char *str) //单词逆序
{
char *str_o = str;
int len = strlen(str); //全部长度
str_reverse(str, len); //全部逆序
while(*str != '\0') //
{
while(*str == ' ') //遇到空格
{
str++; // 指针加
}
len = str_word_len(str); // 单词长
str_reverse(str,len); //单词逆序
str += len; //加上单词长度以后
}
return str_o;
}
int main()
{
char str[30] = "I am from linfen!";
printf("%s\n",str);
printf("%s\n",reverse_setence(str));
return 0;
}
4. 判断回文
int is_palind(char *str) //字符串回文
{
int len = strlen(str);
for(int i = 0 ; i < len/2 ; i++)
{
if(str[i] != str[len - 1 - i])
{
return 0;
}
}
return 1;
}
5.整型数 转化为任意进制的字符串
/* 整型数 转换为 任意进制*/
char *my_itoa(unsigned int x,int scale, char *buf)// scale 是几进制 buf用于存放
{
int i = 0;
int low;
while ( x > 0 )
{
low = x % scale;
if(low >= 10)
{
buf[i] = low -10 + 'a';
}else
{
buf[i] = low + '0';
}
x /= scale;
i++;
}
buf[i] = '\0';
str_reverse(buf, strlen(buf));
return buf;
}
int main()
{
//char str[30] = "I am from linfen!";
//printf("%s\n",str);
//printf("%s\n",reverse_setence(str));
char str[30];
unsigned int x = 0xbeffdead;
printf("%s\n",my_itoa(x,16, str));
//printf("%d\n", is_palind(str));
return 0;
}