PTA作业分析3

7-2 统计数字字符

输入一串字符(中间无空格,字符串最长80),统计其中数字字符0-9各出现多少次,输出出现过的数字(每3个字母占一行)及其出现次数。

输入格式:

字符串

输出格式:

输出出现过的数字(每3个字母占一行)及其出现次数。

例如:

1:2次 3:1次

输入样例1:

12edRRde456123232

输出样例1:

1:2次 2:4次 3:2次 
4:1次 5:1次 6:1次 

输入样例2:

wewQQFTSerfgs

10个数字字符都没出现过

思路 :要统计数字字符个数,用“”的思想

定义一个桶a[10],初始值均为0

遍历字符串,如果有数字字符,该数字下标相对应的元素值+1

eg:遇到‘6’,做a['6'-'0']+=1;//将字符数字变成int

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

int main(void) {
	char str[81];
	gets(str);
	int len = strlen(str);
	int a[10] = {0};
	for (int i = 0; i < len; i++) {
		if (str[i] <= '9' && str[i] >= '0') {
			a[str[i] - '0']++;
		}
	}
	int count = 0,flag=0;
	for (int i = 0; i < 10; i++) {
		if (a[i] > 0) {
            flag=1;
			count++;
			printf("%d:%d次", i, a[i]);
			if (count % 3 == 0) {
				printf(" \n");
			} else {
				printf(" ");
			}
		}
	}
    if(flag==0){
        printf("10个数字字符都没出现过");
    }


}

7-1 统计单词的长度 

本题目要求编写程序,输入一行字符,统计每个单词的长度。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出每个单词的长度。每个数字后有一个空格。

输入样例:

How are you?

输出样例:

3 3 4 

思路:

根据题目意思应该以空格来分隔单词

要注意全为空格的情况,用flag来判断是否全为空格

#include<stdio.h>
int main()
{
	int count=0;
    int flag=0;
	char ch;
	scanf("%c",&ch);
	if(ch!=' ')
		count++;
	while(ch!='\n'){
		scanf("%c",&ch);
		if(ch!=' '&&ch!='\n')
			count++;
		if(ch==' '||ch=='\n'){
			if(count!=0){
			printf("%d ",count);
			flag=1;
			}
			count=0;
		}
	}
	if(flag!=1){
        printf("0 "); 
    }
	return 0;
}

7-8 找出不是两个数组共有的元素

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:

输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:

在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:

10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1

输出样例:

3 5 -15 6 4 1

 思路:

定义3个数组a,b,c

a,b用来输入两个数组,c来存储不同的数字

依次遍历a,b然后找不同

int main()
{
    int n, m;
    int i, j;
    int a[20], b[20], c[20];
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", a + i);

    scanf("%d", &m);
    for (int i = 0; i < m; i++)
        scanf("%d", b + i);
//判断
    int cnt = 0;
    for (i = 0; i < n; i++)
    {
    	for (j = 0; j < m; j++)
    	{
    		if (a[i] == b[j])
    			break;
    	}
    	if (j == m)
    		c[cnt++] = a[i];
    }

    for (i = 0; i < m; i++)
    {
    	for (j = 0; j < n; j++)
    	{
    		if (b[i] == a[j])
    			break;
    	}
    	if (j == n)
    		c[cnt++] = b[i];
    }
    //相同数字不输出
    printf("%d", c[0]);
    for(i = 1; i < cnt;i++)
    {
        for (j = 0; j < i; j++)
        {
        	if (c[i] == c[j])
        	{
        		break;
        	}
        }
        if (j == i)
        {
        	printf(" %d", c[i]);
        }
    }
    return 0;
}

7-3 查找敏感词

安全保密是一项重要的工作,通过查找敏感词可以判定文件中是否涉及涉密。请实现判定特定字符串(字符串长度不超过100)中是否包含敏感词(长度不超过10)的功能。

输入格式:

待检查字符串

敏感词

输出格式:

存在敏感词输出“敏感词的起始位置为X”,否则,输出“没有敏感词”

输入样例1:

hello world! time OK!
time

输出样例1:

敏感词的起始位置为13

输入样例2:

hello world! time OK!
secret

输出样例2:

没有敏感词

思路:

以空格分隔单词,以单词为单位判断是否相同。

如果用每个字符遍历会存在以下问题:

1.存在超时现象

2.如果输入敏感词为单词的字串,也会被判存在,但是实际上不存在敏感词

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

int main() {
    char str[101], word[11];
    fgets(str, 101, stdin);
    fgets(word, 11, stdin);
    int len1 = strlen(str), len2 = strlen(word);
    if (word[len2 - 1] == '\n') {
        word[len2 - 1] = '\0';
        len2--;
    }
    for (int i = 0; i < len1 - len2 + 1; i++) {
        int j;
        for (j = 0; j < len2; j++) {
            if (str[i + j] != word[j]) {
                break;
            }
        }
        if (j == len2) {
            printf("敏感词的起始位置为%d", i);
            return 0;
        }
    }
    printf("没有敏感词");
    return 0;
}

 

7-15 找最小的字符串

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

输入格式:

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

输出格式:

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

Min is: 最小字符串

输入样例:

5
Li
Wang
Zha
Jin
Xian

输出样例:

Min is: Jin

 思路:

调用strcmp(s1,s2)函数来判断

strcmp(s1,s2)>0 -->        s1>s2

strcmp(s1,s2)==0 -->        s1==s2

strcmp(s1,s2)<0 -->        s1<s2

#include<stdio.h>
#include<string.h>
int main(void){
    int n;
    scanf("%d\n",&n);
    char str[n][80];
    for(int i=0;i<n;i++){
        scanf("%s",str[i]);
    }
    int min=0;
    for(int i=0;i<n;i++){
        if(strcmp(str[min],str[i])>0)
            min=i;
    }
    printf("Min is: %s",str[min]);
}

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您解答有关 PTA 作业 7 函数的问题。 PTA 作业 7 中,主要涉及到函数的定义、调用和使用。下面是一些常见的函数问题: 1. 如何定义函数? 函数定义的一般形式为: ``` 返回值类型 函数名(参数列表) { 函数体 } ``` 其中,返回值类型可以是任意类型,函数名是用户自己定义的函数名,参数列表是函数的输入参数,可以有多个参数,也可以没有参数。函数体是函数的具体实现,包括一系列的语句和逻辑。 例如,定义一个求两个整数之和的函数: ``` int add(int a, int b) { return a + b; } ``` 2. 如何调用函数? 函数调用的一般形式为: ``` 函数名(参数列表); ``` 其中,函数名是需要调用的函数名,参数列表是函数的输入参数,需要按照函数定义的顺序传入。 例如,调用上面定义的 add 函数: ``` int result = add(3, 4); ``` 3. 如何使用函数? 函数的使用主要包括两个方面:函数的调用和函数的返回值的使用。 函数的调用已经在上面介绍过了,在这里重点讲解函数的返回值的使用。 如果函数有返回值,可以将函数调用的返回值赋值给一个变量,然后在程序中使用这个变量。 例如,使用上面定义的 add 函数: ``` int a = 3; int b = 4; int result = add(a, b); printf("%d + %d = %d\n", a, b, result); ``` 这样,程序就会输出:3 + 4 = 7。 希望这些信息对您有所帮助。如果您有任何其他问题,请随时问我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值