(c语言)将一句话的单词进行倒置,标点不倒置(i like beijing.)

目录

例子:

思路方法:

​编辑

 (分板块)代码的实现:

一.字符串的获取(3种简单的方法)

1.用gets()函数,即使中间有空格也会读取

2.用fgets()函数     

3.用scanf("%[^n]s")读取也可以达到同样的效果

二.字符串倒置代码的实现:

字符串倒置的代码实现:

 三.每个单词的倒置代码实现:

整个代码的实现:

 知识点总结:



例子:

"I like beijing.",经过处理后变为:"beijing. like I"。
//字符串长度不超过100。(注意不是简单的将字符串全部倒置);


思路方法:

方法:

第一步:先将字符串全部倒置;

第二步:将每个单词进行倒置;

方法2:

也可以先进行单词倒置,在将整个字符串倒置;

图解:

 


 

(分板块)代码的实现:

一.字符串的获取(3种简单的方法)

注意:

这里我们不能通过循环用scanf函数来读取;因为scanf()函数遇到空格就停止读取;

例如

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char arr[100];
	int i = 0;
	while (scanf("%s", &arr) != EOF)
	{
		;
	}

	return 0;
}

当输入  “ i  like   beijing." 时,arr的内容为:

 


解决方法:

1.用gets()函数,即使中间有空格也会读取

#include <stdio.h>
int main()
{
	char arr[100];
	printf("获取字符n");
	gets(arr);

	printf("narr字符串的内容为:%sn",arr);

	return 0;
}

运行结果:

 

 


2.用fgets()函数     

 gets(arr,100,stdin)

用法:fgets(读取的字符放大位置(如要放入arr里),限制最多读取多少(如限制最多读取100字符,在哪里读取(如从键盘上获取stdin));

stdin——>标准输入—键盘;

注意:fgets会把(n)回车作为字符获取;如果n影响代码实现,不想要n,可以在读取后,计算字符串长度然后将最后一个字符换为;

#include <stdio.h>

int main()
{
	char arr[100];
	printf("获取字符n");
	fgets(arr,100,stdin);

	printf("narr字符串的内容为:%sn", arr);

	return 0;
}

 删去n:

#include <stdio.h>

int main()
{
	char arr[100];
	printf("获取字符n");
	fgets(arr,100,stdin);
	//计算字符串长度(不用sizeof的原因在在其他博客作品
	//”strlen和sizeof的区别及用法中“有写过)
	int len = strlen(arr);
	//将最后一个字符n用取代,从而删去n
	arr[len - 1] = '';

	printf("narr字符串的内容为:%sn", arr);

	return 0;
}

效果:


3.用scanf("%[^n]s")读取也可以达到同样的效果

加了[^n]——>意思是一直读取,直到遇到 n (回车),即使中间有空格

#include <stdio.h>
int main()
{
	char arr[100];
	printf("获取字符n");
	while (scanf("%[^n]s", &arr) != EOF)
	{
		;
	}
	printf("narr字符串的内容为:%sn", arr);

	return 0;
}

运行结果:(不会像最前面那样遇到空格就停止读取)

 



二.字符串倒置代码的实现:

因为后面单词的倒置和字符串的倒置相同,所以这里分装一个函数 ReversrArr( ) 来实现倒置;

这里参数只需将字符串的初末元素地址传入,用指针char* left  和char* right接收

数组名即首元素地址,容易得到;

末元素地址可以用strlen(arr)函数得到长度,再用(arr+长度-1)得到;

 

字符串倒置的代码实现:

//字符串倒置代码实现
void ReverseArr(char* left, char* right)
{
	while (left < right)
	{
		char tmp = *left;//中间变量
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
#include <stdio.h>
#include <string.h>

int main()
{
	char arr[100];
	printf("获取字符n");
	gets(arr);
	//计算字符串的长度
	int len = strlen(arr);
    //倒置字符串
	ReverseArr(arr,arr+len-1);

	printf("%sn",arr);

	return 0;
}

运行结果:



 三.每个单词的倒置代码实现:

我们要用前面的 ReverseArr()需要知道每个单词的起始leftright

由于每个单词用 空格 隔开的,所以我们可以用 空格 来作为遍历条件

 

代码实现:

//每个单词的倒置
	char* start = arr;
	char* end = arr;

	while (*end != '')
	{
		while (*end != ' ' && *end != '')
		{
			end++;
		}
		ReverseArr(start, end-1);
		start = end + 1;
		if (*end == ' ')
		{
			end++;
		}
	}



整个代码的实现:

//字符串倒置代码实现
void ReverseArr(char* left, char* right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
#include <stdio.h>
#include <string.h>

int main()
{
	char arr[100];
	printf("获取字符n");
	gets(arr);
	/*printf("%sn",arr);*/
	//计算字符串的长度
	int len = strlen(arr);
	ReverseArr(arr,arr+len-1);
	/*printf("%sn",arr);*/
	//每个单词的倒置
	char* start = arr;
	char* end = arr;

	while (*end != '')
	{
		while (*end != ' ' && *end != '')
		{
			end++;
		}
		ReverseArr(start, end-1);
		start = end + 1;
		if (*end == ' ')
		{
			end++;
		}
	}
	printf("%sn",arr);

	return 0;
}

运行结果:

 


知识点总结:

1.该算法思想

2.字符串输入(获取)的3种方法

       1.  scanf("%[^n]s",&arr)   注意:scanf("%s",&arr)遇到空格会停止读取    

加了[^n]——>意思是一直读取,直到遇到 n (回车),即使中间有空格

       2.gets(arr)    可以读取空格

       3.fgets(arr,100,stdin)   

           arr --->读取的文本放在哪里(arr)

          100--->读取的最大限制

          stdin--->标准输入----键盘

          注意:fgets会把(n)回车作为字符获取;如果n影响代码实现,不想要n,可以在读取                后,计算字符串长度然后将最后一个字符换为;删除方法示例在前面fgets处

3.倒置字符串和单词的方法

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>