【PTA|编程题|期末复习】字符串(二)

本文详细介绍了C语言中关于字符和字符串的多种操作,包括字符转换为整数、输出大写英文字母、寻找最小和最长字符串,以及字符串的冒泡排序。提供了示例代码和编译器要求。
摘要由CSDN通过智能技术生成

【C语言/期末复习】字符和字符串函数(附思维导图/例题)

【PTA|编程题|期末复习】字符串(一)

目录

【C语言/期末复习】字符和字符串函数(附思维导图/例题)

7-6 字符转换

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-7 输出大写英文字母

输入格式:

输出格式:

输入样例1:

输出样例1:

输入样例2:

输出样例2:

代码

7-8 找最小的字符串

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-9 找最长的字符串

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-10 字符串的冒泡排序

输入格式:

输出格式:

输入样例:

输出样例:

代码


7-6 字符转换

本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。

输入格式:

输入在一行中给出一个不超过80个字符且以回车结束的字符串。

输出格式:

在一行中输出转换后的整数。题目保证输出不超过长整型范围。

输入样例:

free82jeep5

输出样例:

825

编译器:GCC

代码

#include<stdio.h>
int main()
{
	char str[81]={0};
    //全部初始化为0,防止输入字符串长度小于数组长度,多出剩余位置随机值的影响
    //如果不进行初始化赋值,下面的for循环可以改成终止条件为str[i]!='\0',则可以避免多出剩余位置随机值的影响
	gets(str);//输入字符串 gets函数会在末尾自动加'\0'的
	int count = 0;
	for (int i = 0; i<81; i++)//str[i]!='\0'
	{
		if (str[i] >= '0' && str[i] <= '9')
		{
			count = count*10 + str[i] - '0'; //字符数字与字符0的差值,即为该数字的整数形式
		}
	}
	printf("%d", count); //输出结果
	return 0;
}

7-7 输出大写英文字母

本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。

输入格式:

输入为一个以回车结束的字符串(少于80个字符)。

输出格式:

按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。

输入样例1:

FONTNAME and FILENAME

输出样例1:

FONTAMEIL

输入样例2:

fontname and filrname

输出样例2:

Not Found

编译器:GCC

代码

#include<stdio.h>
#include<string.h>
int main()
{
	
	char a1[80];//未做处理的数组 
	char a2[80];//处理后的数组 
	gets(a1); //输入字符串
	
	int k1 = strlen(a1);//计算a1的长度 
	int i;
	int k2 = 0;
	for(i=0; i<k1; i++){
		if(a1[i]>='A'&&a1[i]<='Z'){
			 a2[k2] = a1[i];//将a1中大写字符取出,放到a2中
			 k2++;//下标k2加一
		}
	}
    
	/*如果全为小写字母,a2数组不可能存储
	那么K2不可能自增,会等于0;*/ 
	if(k2 == 0){//如果全为小写的情况 
		printf("Not Found");
	}
	
    //此时a2数组中全部都是大写字母
	//用0,1标记区别重复
	//双重循环来检验,排序重复的字符
	int m,j;
	for(i=0; i<k2; i++){
		m = 0;
		for(j=0; j<i; j++){
			if(a2[i] == a2[j]){
				m = 1; //如果与之前的字符重复则置为1
			}
		}
		if(m == 0){ //只输出不重复的字符
			printf("%c",a2[i]);
		}
	}
	return 0; 
}

7-8 找最小的字符串

本题要求编写程序,针对输入的N个字符串,输出其中最小的字符串。

输入格式:

输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。

输出格式:

在一行中用以下格式输出最小的字符串:

Min is: 最小字符串

输入样例:

5
Li
Wang
Zha
Jin
Xian

输出样例:

Min is: Jin

编译器:GCC

代码

#include<stdio.h>
#include<string.h>
int main()
{
	int N;
	char s[80];
	char minS[80];

	scanf("%d", &N);//输入数字

	// 将最小的字符串先假设为第一个字符串
	scanf("%s", s);//输入字符串
	strcpy(minS, s); //使用strcpy,将字符串s赋值给字符串mins

	// 继续输入剩下的N-1个字符串
	for (int i = 1; i <= N - 1; i++)
	{
		scanf("%s", s);

		// 如果新输入的字符串小于minS,则更新minS
		if (strcmp(s, minS) < 0)//strcmp函数比较两个字符串大小
		{
			strcpy(minS, s); //赋值替换
		}
	}

	printf("Min is: ");
	puts(minS); //输出字符串
	
	return 0;
}

7-9 找最长的字符串

本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。

输入格式:

输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。

输出格式:

在一行中用以下格式输出最长的字符串:

The longest is: 最长的字符串

如果字符串的长度相同,则输出先输入的字符串。

输入样例:

5
li
wang
zhang
jin
xiang

输出样例:

The longest is: zhang

编译器:GCC

代码

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

int main()
{
    int n;
    scanf("%d", &n);//输入整数n
    char str[n][80]; //字符串数组
    int m, max = 0;
    for (int i = 0; i < n; i++)
    {
        scanf("%s", &str[i]); //输入字符串
        if (strlen(str[i]) > max) //strlen函数计算字符串长度并与max比较
        {
            max = strlen(str[i]);//max更新
            m = i;//记录最长的下标
        }
    }
    printf("The longest is: %s\n", str[m]);//输出最长的字符串
    return 0;
}

7-10 字符串的冒泡排序

我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

输入格式:

输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:

输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。

输入样例:

6 2
best
cat
east
a
free
day

输出样例:

best
a
cat
day
east
free

编译器:GCC

代码

#include<stdio.h>
#include<string.h>
int main()
{
    int n,k,i,j;
    scanf("%d %d",&n,&k);//输入两个整数 
    char data[n][11];//定义字符串数组
    for(i=0;i<n;i++)
        scanf("%s",data[i]);//使用字符串给字符串数组赋值
    for(i=0;i<k;i++) //比较k遍
    {
        for(j=0;j<n-1-i;j++)
        {
            if(strcmp(data[j],data[j+1])>0)//strcmp函数比较字符串大小
            {
                char temp[11];
                strcpy(temp,data[j]); //使用strcpy函数对字符串赋值,实现交换
                strcpy(data[j],data[j+1]);
                strcpy(data[j+1],temp);
            }
        }
    }
    for(i=0;i<n;i++)
        printf("%s\n",data[i]);//字符串遍历输出
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值