代码练习笔记(10)

头歌

1.输入3行,每行n个字符串,按由小到大的顺序输出

注意比较顺序,12,13,23的比较顺序才能得到1<2<3的效果。

输出用puts函数,不用循环printf,更加方便。

#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[100],arr2[100],arr3[100],arr4[100];
	fgets(arr1,sizeof(arr1),stdin);
	fgets(arr2,sizeof(arr2),stdin);
	fgets(arr3,sizeof(arr3),stdin);
	arr1[strcspn(arr1, "\n")] = '\0';
	arr2[strcspn(arr2, "\n")] = '\0';
	arr3[strcspn(arr3, "\n")] = '\0';
	if((strcmp(arr1,arr2))>0)
	{
		strcpy(arr4,arr2);
		strcpy(arr2,arr1);
		strcpy(arr1,arr4);
	}
	if((strcmp(arr1,arr3))>0)
	{
		strcpy(arr4,arr3);
		strcpy(arr3,arr1);
		strcpy(arr1,arr4);
	}
	if((strcmp(arr2,arr3))>0)
	{
		strcpy(arr4,arr3);
		strcpy(arr3,arr2);
		strcpy(arr2,arr4);
	}
    puts(arr1);
    puts(arr2);
    puts(arr3);
	return 0;
}

2.字符串统计

输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。

思路:通过统计空格数来计算每个字符串长度,以找到最长字符串。

#include <stdio.h>
#include <string.h>
int main() 
{
    char arr[200];
    int i, m, c, j = 0;
    int arr2[200];
    int b = 0;
    int len;
    while (fgets(arr, sizeof(arr), stdin)) 
	{
        arr[strcspn(arr, "\n")] = '\0';
        if (strcmp(arr, "stop") == 0) 
		{
            break;
        }
        b = 0;
        j = 0;
        len = strlen(arr);
        for (i = 0; i < len; i++) 
		{
            if (arr[i] == ' ') 
			{
                arr2[b] = i;//记录空格下标
                b++;
            }
			 else 
			{
                j++;//记录字符长度
            }
        }
        if (arr[len - 1] != ' ') 
		{
            arr2[b] = len;
            b++;
        }
        int maxLen = 0;
        int maxStart = 0;
        for (m = 0; m < b - 1; m++) 
		{
            c = arr2[m + 1] - arr2[m] - 1;//计算中间字符长度
            if (c > maxLen) 
			{
                maxLen = c;
                maxStart = arr2[m] + 1;
            }
        }
        if (b <= 1) 
        {
            printf("%d ",len);
            for(i=0;i<len;i++)
            {
                printf("%c",arr[i]);
            }
            printf("\n");
        }
        if(b>1)
        {
            printf("%d ", j);
            if (maxLen > 0) 
			{
            for (i = maxStart; i < maxStart + maxLen; i++) 
			{
                printf("%c", arr[i]);
            }
            printf("\n");
        	}
        }
    }
    return 0;
}

3.字符插入

输入两个字符串a和b,将b串中的最大字符插入到a串中最小字符后面。

警告:该方法不正规,没有往字符数组中插入,而是分开打印以达到题目要求。

#include <stdio.h>
#include<string.h>
int main()
{
    char a[100];
    char b[100];
    char max,min;
    int i,m;
    fgets(a,sizeof(a),stdin);
    fgets(b,sizeof(b),stdin);
    a[strcspn(a,"\n")]='\0';
    b[strcspn(b,"\n")]='\0';
    max=b[0];
    for(i=1;b[i]!='\0';i++)
    {
        if(b[i]>=max)
        {
            max=b[i];
        }
    }
    min=a[0];
    for(i=0;a[i]!='\0';i++)
    {
        if(a[i]<=min)
        {
            min=a[i];
            m=i;
        }
    }
    for(i=0;i<=m;i++)
    {
        printf("%c",a[i]);
    }
    printf("%c",max);
    for(i=m+1;a[i]!='\0';i++)
    {
        printf("%c",a[i]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值