字符串课后练习
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);
}
}