字符串练习

1,统计一个字符串中个字符的百分比:
如输入字符串asdfs
a —– 20%
s —– 40%
d —–20%
f —–20%

#include <stdio.h>
#include <string.h>

void percentage( char *str, int len )
{
    int i = 0;
    int j = 0;
    int count = 1;
    int num = 0;

    while( *str != '\0' )
    {
        for( i = 1; i < len; i++ )
        {
            while( *str == *(str + i) )
            {
                count++;                                //当后面的字符串中有相同字符时,count+1
                *(str + i) = ' ';                       //同时让相同的字符为' '
            }
        }
        if(*str != ' ')
        {
            num = count * 100 / len;                    //不好直接输出百分比,让num等于百分比之前的数字,百分号用printf输出
            printf("%c-------%d\%\n",*str,num);         //输出字符和相应的占字符串中的百分比
            count = 1;                                  //让count又=1
        }
        str++;                                          //判断下一个字符
    }
}

int main()
{
    char str[100] = {0};
    int len = 0;

    printf("please input astring:");
    scanf("%s",str);                                    //输入字符串

    len = strlen(str);                                  //定义len为字符串的长度

    percentage(str,len);                                //调用percentage函数

    return 0;
}

2、给一个字符串,有大小写字母,要求写一个函数把小写字母放在前面,大写字母放在后面,尽量使用最小空间,时间复杂度。(即用指针做)。
如:aAbBcCdD —abcdABCD

#include <stdio.h>
#include <string.h>

void str_sort(char *str,char *stra,char *strA)
{
    while(*str != '\0')
    {
        if(*str >= 'a' && *str <= 'z')
        {
            *stra = *str;
            stra++;
            str++;
        }                                       //当字符为小写字母时将字符放进stra字符数组中
        if(*str >= 'A' && *str <= 'Z')
        {
            *strA = *str;
            strA++;
            str++;
        }                                       //当字符为大写字母时将字符放进strA字符数组中
    }
}

int main()
{
    char str[100] = {0};
    char stra[100] = {0};
    char strA[100] = {0};

    printf("please input a string:");
    scanf("%s",str);                            //输入一段含有大写字母和小写字母的字符串

    str_sort(str,stra,strA);                    //调用str_sort函数
    printf("%s\n",strcat(stra,strA));           //输出stra、strA连接后的字符串

    return 0;
}

3、自我实现atoi(字符串转整形)
如:“123”转换成 123
“-123” 转换成 -123

#include <stdio.h>
#include <string.h>

int convert(char *str)
{
    int len = strlen(str);
    int i = 0;
    int num = 0;
    int temp = 1; 
    if( str[0] == '-' )
    {
        temp = -1;                                  //判断第一个字符是否为-,是让temp=-1
    }
    else
    {
        num = str[0] - '0';                         //不是,让其转换为数字并赋给num
    }

    for(i = 1; i < len; i++)
    {
        num = num * 10 + *(str + i) - '0';          //将字符转换成数字
    }
    num = num * temp;                               //让num乘以temp,正数转换为正数,负数转换为负数

    return num;                                     //返回num的值
}

int main()
{
    char str[100] = {0};
    int num = 0;

    printf("please input a string:");
    scanf("%s",str);                                //输入数字字符串

    num = convert(str);                             //调用转换函数
    printf("%d\n",num);                             //输出转换后的数字

    return 0;
}

4、自我实现itoa(整形转字符串)
如: 123 转换成 “123”
“-123” 转换成 -123

#include <stdio.h>

void convert(int num, char *str)
{
    int i = 0;
    int j = 0;
    while( num != 0 )
    {
        if(num < 0)
        {
            num = -num;                     //如果num < 0,将其变成正数
        }
        i = num % 10 + '0';
        str[j++] = i;
        num /= 10;                          //从最低位开始将num中每一位取出加上'0'变成数字字符并存到str数组中
    }
    while(j--)
    {
        printf("%c",str[j]);                //倒着输出str数组中的字符
    }
    printf("\n");
}

int main()
{
    char str[100] = {0};
    int num = 0;

    printf("please input a number:");
    scanf("%d",&num);                       //输入num的值

    if(num < 0)
    {
        printf("-");                        //如果num < 0,输出一个'-'
    }

    convert(num, str);                      //调用转换函数

    return 0;
}

5、统计字符串中子串的个数。
如: 主串“aqwerqwerqwer”
子串 “qwer”
输出 3

#include <stdio.h>

void compare(char *str1, char *str2)
{
    int count = 0;
    char *p1 = NULL;
    char *p2 = NULL;                                    //定义p1 p2两个空指针
    p1 = str1;
    p2 = str2;                                          //将str1和str2两个字符串分别赋给p1 p2

    while(*p1 != '\0')
    {
        if(*p1 == *p2)
        {
            p1++;           
            p2++;                                       //当两个指针里的字符相等时,比较下一个字符
        }
        else
        {
            p1++;                                       //不相等时p1往后一个字符
        }
        if(*p2 == '\0')
        {
            count++;                                    //当p2到最后时代表p1中有和p2一样的字符,让count+1
            p2 = str2;                                  //让p2再次等于str2
        }
    }
    printf("%d\n",count);                               //输出count的值
}

int main()
{
    char str1[100] = {0};
    char str2[100] = {0};

    printf("please input the first string:\n");
    scanf("%s",str1);                                   //输入字符串str1
    printf("please input the second string:\n");
    scanf("%s",str2);                                   //输入字符串str2

    compare(str1,str2);                                 //调用compare函数

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值