1.题目
输入字符串,字符串包含字母(大小写)、数字和其他符号;
要求:只输出字母;
单词并不倒叙;
遇到其他符号输出空格,多个非字母符号相邻只输出一个空格;
示例:
输入:I am student.
输出:student am i
输入:iasda123ASDSas123 01 01asd
输出:iasda ASDSas asd
2.思路详解
此题我们需要从后往前进行遍历,
设置两个变量:start、end, start用于记录字母的开头,end用于记录字母的结尾。
同时我们我们需要两个关键符号:flag、key, flag用于记录这个字母是否连续,key用于记录其它符号是否连续。
3.代码
将字符串倒叙,但字母不倒叙,其他输出为‘ ’,空格不能连续 · 53fe99b · 风夏/C语言进阶 - Gitee.com
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
char arr[10001] = { "\0" };
int i = 0;
int j = 0;
while (1)
{
char tmp = '0';
scanf("%c", &tmp);
if (tmp == '\n')
break;
arr[i] = tmp;
i++;
}
int len = strlen(arr);
int end = 0;
int start = 0;
//key是1表示非字母连续,0不连续
int key = 0;
//flag是1表示字母连续,0不是不连续
int flag = 0;
for (i = len-1; i >= 0; i--)
{
//是字母,
if ( isalpha(arr[i]))
{
//第一个字母
if (flag == 0)
{
end = i;
flag = 1;
key = 0;
}
else//连续的字母,往后循环
;
}
else//不是字母
{
if (flag)//前面是字母
{
start = i + 1;
for (j = start; j <= end; j++)
{
printf("%c", arr[j]);
}
}
//字母连续标记清0
flag = 0;
//第一个非字母元素
if (key == 0)
{
printf(" ");
key = 1;
}
}
//特殊情况考虑:输出最后是字母,但没有结束标志(没有非字母元素)
if (flag == 1 && i == 0)
{
start = 0;
for (j = 0; j <= end; j++)
printf("%c", arr[j]);
}
}
return 0;
}
4.总结
在真正自己写的时候才能发现里面有哪些需要注意的。
希望大家越学越好。
本文含有隐藏内容,请 开通VIP 后查看