C语言 字符串系列

目录

1. 计算字符串的长度

2.字符串 查找

3.字符逆序  单词逆序

4. 判断回文

5.整型数 转化为任意进制的字符串


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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值