单词字母逆序标点符号位置保持不变
怎么在每个单词字母逆序中让标点符号的位置保持不变? 本帖最后由 一世轻尘 于 2020-12-31 09:25 编辑{:10_279:}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//step1:全盘翻转
void AllReverse(char *str)
{
int len=strlen(str);
int i=0,j=len-1;
while (i<j)//实现逆序的判别条件
{//全盘翻转:前后下标位置处遍历交换!!!
if(str!=32&&str<=65)
i++;
if(str!=32&&str<=65)
j--;
char tmp=str;
str=str;
str=tmp;
i++;
j--;
}
}
int main(){
//char *p="hello world";//字符串常量
char p[]="hello world.";
AllReverse(p);
printf("%s",p);
system("pause");
return 0;
} 一世轻尘 发表于 2020-12-31 09:18
这是我自己写的
// 怎么在每个单词字母逆序中让标点符号的位置保持不变?
#include <stdio.h>
#include <ctype.h>
void restr(char *start, char *end)
{
char c, *p, *q;
p = start;
q = end;
unsigned int half;
half = (q - p) / 2;
while (p <= start + half)
{
c = *p;
*p = *q;
*q = c;
p++;
q--;
}
}
int main(void)
{
char a, *p, *start, *end;
int b = 0;
gets(a);
p = start = end = a;
while (*p)
{
if (isspace(*p) || ispunct(*p) || *(p + 1) == '\0')
{
if (b && *(p + 1) == '\0')
end++;
if (b)
restr(start, end);
b = 0;
}
else
{
if (b == 0)
start = p;
end = p;
b = 1;
}
p++;
}
printf("%s\n", a);
return 0;
}
页:
[1]