//只对单词字母反转
/*
题目 :将字符串中的单词全部反转逆序
eg1 :
input :"I am cainiao!"
output :"I ma oainiac!"
eg2 :
input :"I am cainiao!(smm)"
output :"I ma oainiac!(mms)"
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *mao(char *node)
{
//计算字符串个数
int n = strlen(node);
//循环
for(int i =0;i<n;i++)
{
//i表示每个单词开始的中间值
//i==n结束循环
int j = 0;//记录一个单词末尾加标
int h = i;//记录单词开头下表
int co = 0;//记录下一个单词开始的下表
//1------计算当前单词到结束尾部
for(j = i;j<=n;j++)
//找到单词末尾,单词末尾不为单词
if(!((node[j]>='a'&&node[j]<='z')||(node[j]>='A'&&node[j]<='Z')))
break;
printf("j=%d",j);//打印尾部
//2------计算下一个单词开始下表初始化
co=j;
for(co=j;co<=n;co++)
{
//如果是结束符号,就退出检测
if(co=='\0')
break;
//如果是下一个字母是单词,就退出循环
if(((node[co+1]>='a'&&node[co+1]<='z')||(node[co+1]>='A'&&node[co+1]<='Z')))
break;
}
//将下一个单词的开始下标赋值给i
i=co;
//3------将单词中的异常符号剔除,指的是将下表往左移
while(!((node[j-1]>='a'&&node[n-1]<='z')||(node[j-1]>='A'&&node[j-1]<='Z')))
j--;
//4------将单词反转,这里的【k,j】区间就是单词区间
for(int k=h;k<j;k++,j--)
{
//首位交换
char temp = node[k];
node[k]=node[j-1];
node[j-1]=temp;
}
//每个的交换后的单词打印一下
printf("%s\n",node);
}
return NULL;
}
int main(int argc, char const *argv[])
{
char a[100]="I am cainiao!(smm)";
mao(a);
return 0;
}
2024——cvte嵌入式笔试_字符内单词逆序
最新推荐文章于 2024-11-04 10:53:43 发布