ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言习题——倒置字符串及单词倒排问题

2022-03-01 10:07:09  阅读:197  来源: 互联网

标签:char arr cur 倒排 C语言 单词 习题 ptr 逆序


倒置字符串原题链接

倒置字符串_好未来笔试题_牛客网 (nowcoder.com)

下面给出代码:

#include <stdio.h>
#include <string.h>
void reverse(char* left, char* right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[100] = { 0 };
	gets(arr);
	int len = strlen(arr);
	//逆序整个字符串
	reverse(arr, arr + len - 1);
	//逆序单词
	char* cur = arr;
	char* start = arr;
	while (*cur != '\0')
	{
		while (*cur != ' ' && *cur != '\0')
		{
			cur++;
		}
		reverse(start, cur - 1);
		if (*cur != '\0')
		{
			start = cur + 1;
			cur++;
		}
	}
	printf("%s\n", arr);
	return 0;
}

思路是先逆序整个字符串再逆序每个单词

注意的是在逆序每个单词时,当*cur为空格时,cur-1才是一个单词的结尾,cur+1是下一个单词开始的位置,逆序单词是一个重复的过程,所以当cur != '\0'时循环不断进行,而在逆序单词的时候,当*cur=‘\0’时,说明所有单词已经逆序完毕,所以此时的cur就不需要再++,start指针也就不需要重新赋值了。

单词倒排问题原题链接:

单词倒排_牛客题霸_牛客网 (nowcoder.com)

代码如下:

#include <stdio.h>
int main()
{
	char str[10001] = { 0 };//字符串最长10000
	int row = 0;
	while (gets(str) > 0)
	{
		char* ptr = str;
		char* word[10000] = { NULL };
		while (*ptr != '\0')
		{
			//如果是个字母字符,则是单词的起始字符
			if (('z' >= *ptr && *ptr >= 'a') || ('Z' >= *ptr && *ptr >= 'A')) 
			{
				word[row++] = ptr;//保存每个单词的起始地址
				//把本次的单词字母字符走完,直到遇到非字母字符
				
				while((*ptr != '\0') &&('z' >= *ptr && *ptr >= 'a') || ('Z' >= *ptr && *ptr >= 'A'))
				{
					ptr++;
				}
				continue;//不能继续向下,因为下边的ptr++会跳过当前的非字母字符
			}
			*ptr = '\0';//把非字母的数据全部替换为结尾标志
			ptr++;
		}
		for (int i = row - 1; i >= 0; i--)
		{
			printf("%s ", word[i]);//针对所有单词的起始地址逆序开始打印即可
		}
		return 0;
	}
}

注释很详细,不再赘述。

水平有限欢迎指正。

标签:char,arr,cur,倒排,C语言,单词,习题,ptr,逆序
来源: https://blog.csdn.net/weixin_64450655/article/details/122898410

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有