字符串课后练习

7-1 打印菱形图案

本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。

7-2 字符串逆序

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

print(input()[::-1]) # 用python一句话搞定

7-3 统计字符

统计一个给定字符串中指定的字符出现的次数。

#include <stdio.h>

int main()
{
	for (;;)
	{
		int counts[5] = {0};	// 用于记录每个字符出现的次数
		char table[5], str[80]; // table是要记录的字符,str是要统计的字符串

		int i = -1;   // i是(要统计的字符)的个数
		while (i < 5) // 用循环调用getchar()的方式读table
			if ('\n' == (table[++i] = getchar()))
				break;
			else if ('#' == table[i]) // 读到#时退出
				return 0;

		fgets(str, 80, stdin);				 // 等同于gets(str),读入要统计的字符串
		for (int j = 0; str[j] != '\0'; j++) // 遍历目标字符串
			for (int k = 0; k < i; k++)		 // 遍历table
				if (str[j] == table[k])		 // 如果出现了要统计的字符,则在counts相应的位置+1
					counts[k]++;

		for (int k = 0; k < i; k++) // 输出counts
			printf("%c %d\n", table[k], counts[k]);
	}
}

7-4 统计一行文本的单词个数

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

#include <stdio.h>

int main()
{
	int i = 0;
	char c[1000];
	while (scanf("%s", c) != EOF)
		i++;
	printf("%d", i);
}

7-5 字符串字母大小写转换

本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

#include <stdio.h>

int main()
{
	char c;
	while ((c = getchar()) != '#')
	{
		if ('a' <= c && c <= 'z')
			putchar(c - 32);
		else if ('A' <= c && c <= 'Z')
			putchar(c + 32);
		else
			putchar(c);
	}
}

7-6 倒数第N个字符串

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …, aaz, aba, abb, …, abz, …, zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int len, num;
    scanf("%d%d", &len, &num);
    num--;
    char *output = malloc(sizeof(char) * len + 1);
    output[len] = '\0';
    for (int i = 0; i < len; i++)
    {
        output[len - i - 1] = 'z' - num % 26;
        num /= 26;
    }
    printf("%s\n", output);
}

7-7 6翻了

“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!

本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

#include <stdio.h>

int main()
{
	char c;
	while ((c = getchar()) != EOF)
	{
		if (c == '6')
		{
			int i = 1; //统计6的个数
			while ((c = getchar()) == '6')
				i++;

			if (i <= 3) 		// 少于等于3个,有几个6就输出几个6
				for (int j = 0; j < i; j++)
					putchar('6');
			else if (i <= 9) 	// 少于等于9个,输出一个9
				putchar('9');
			else 				// 多于9个,输出27
				printf("27");
		}

		if (c != EOF)
			putchar(c);
	}
}

JunDao

1031 Words

2019-10-25 19:37 +0800