每日练习4-逆置字符串中的单词,标点符号不逆置

题目:

    逆置字符串中的单词,标点符号不逆置。比如字符串“I like Beijing.”,逆置后结果为“Beijing. like I”

解决思路:

(1)我们可以将整个字符串先逆置得到“.gnijieB ekil I”,在逆置每个单词得到“Beijing like I”。当然也可以先逆置单词在逆置整个字符串;

(2)逆置的实现,我们可以定义首尾指针,两两交换,然后首指针++,尾指针--;

(3)每个单词的逆置,以空格为结束标记,整个字符串以‘\0’为结束标记;

(4)标点符号不逆置,只要将它算在单词的一部分即可实现。

实现代码:

#include<stdio.h>
#include<string.h>

void reverse(char* ch, int n)//逆置从数组ch地址开始的n个字符
{
	int i;
	char temp;
	for (i = 0; i<n / 2; i++)
	{
		temp = ch[i];
		ch[i] = ch[n - 1 - i];
		ch[n - 1 - i] = temp;
	}
}


void ReverseSentence(char* ch)//先逆序整体,再进行单词逆序
{
	int i = 0;
	int len;
	len = strlen(ch);
	reverse(ch, len);//将字符串全部逆置
	while (ch[i] != '\0')
	{
		i = 0;
		while (ch[i] != ' ' && ch[i] != '\0')//若当前字符不为空格,指针后移
		{ 
			i++; 
		}
		reverse(ch, i);//字符串ch中i个字符进行逆置
		if (ch[i] != '\0')//如果没有访问到结束标志,要跳过空格字符,继续访问下个单词
			ch = ch + i + 1;
		else//如果当前字符已经是结束标志了,加一即可,若像跳过空格,可能会直接跳过结束标志
			ch = ch + i;
	}
}

int main()
{
	char str[] = "i am Sundy, i come from tianjin.,";
	printf("%s\n", str); 
	ReverseSentence(str);
	printf("%s\n", str);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lycorisradiata__/article/details/80533426
今日推荐