补更

与世无争的帅哥 提交于 2020-03-04 15:34:17

许久没有更新,经发现自己竟然险些堕落,看来还是要学一点就记一点,不然容易得不偿失;(今日感悟)
如今终于完成了自己的第一个拟真超级小项目的开发,但是比起在学校的编程学习来说,收获还是很丰富的,尤其是人生头一次能接触一百以上的行数代码,在学校对于大一来说基本很少有机会(而且学校教的书面知识,真正的也还得靠自己),目前很开心,对于编程初期来说,我觉得兴趣真的超级重要(也包含着对金钱的渴望),每天除了日常课程以外接触最频繁的就是C++.
今天记录一下这些天所获得的知识:
1,多个英文单词的一行字符串,将每个单词倒序输出(单词本身不变,语序变化), 据说这是一道腾讯的笔试题,也不知道是否属实,但是肯定略有难度,感觉对思维有提升:
先上效果图:
在这里插入图片描述
代码如下:

#include<iostream>
#include<Windows.h>
#include<string>

using namespace std;

int main(void) {
	char tc[150];
	int stt;//start
	int end;//end
	stt = 0;
	cout << "请输入一句话:";
	gets_s(tc, sizeof(tc));
	while(tc[stt]){
		while (tc[stt] == ' ')stt++;
		end = stt;
		while (tc[end] != ' ' && tc[end] != '\0')end++;
		int rc1;
		int rc2;
		rc1 = stt;
		rc2 = end-1;
		while (rc1 < rc2) {
			char tmp;
			tmp = tc[rc1];
			tc[rc1] = tc[rc2];
			tc[rc2] = tmp;
			rc1++;
			rc2--;
		}
		stt = end;
	}
	int  i = 0;
	int  j = stt - 1;
	while (i<j){
		char tmp2;
		tmp2 = tc[i];
		tc[i] = tc[j];
		tc[j] = tmp2;
		i++;
		j--;
	}
	cout << tc<< endl;
	system("pause");
	return 0;
}

首先,对于整行包含空格的字符串数组来说,利用char类型来初始化,并用gets_s来进行定义很好的解决了cin对string的空格即停止的不方面,这个方法gets_s(“数组名”,sizeof(数组名)),利用字节计算更加安全.
利用第一个大while来进行有效停止输入,因为char数组的’\0’就是0,所以while直接遇见0而判断为假,从而结束循环,然后进行内部的循环嵌套.
内部的第一个循环是为了跳过字符串前面的无用的空格,直接到达单词位置.
利用第二个嵌套while才是程序核心,整个搜索单词的过程类似于蜗牛的缓慢攀爬,一个元素一个元素地过,确保不出错,利用stt(start)和end确定单词首末,由于是要将整句话倒过来而不改变单词原貌,所以可以直接先倒转每个单词的字母,然后再将整句完全倒序,单词则可以恢复原状.
在遇到单词开头时用stt标记此数组元素的位置,然后让end在stt的基础上自加,确定单词结尾后的下一个位置.
确定完位置之后由于方便第二,第三以及更往后的单词的识别,stt和end保持不变,利用rc1和rc2来记录此时stt和end,然后用rc1和rc2来对单词进行单个倒序排列,利用头部的自加和尾部的自减来快速倒序排列.
这样,就依次完成了每个单词的排列,最后将整个字符串利用如上方法整个再倒序一遍,就可以达到题目要求效果了.
2020.03.04 韩某人上午记

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!