ICode9

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

剑指Offer——面试题58:翻转字符串

2020-02-25 12:36:59  阅读:247  来源: 互联网

标签:面试题 NULL 58 Offer char pBegin pEnd 字符串 include


题目一:翻转单词顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
#include<iostream>
using namespace std;
void Reverse(char* pBegin, char* pEnd){  // 反转字符串 
	if(pBegin==NULL || pEnd==NULL) return;
	while(pBegin<pEnd){
		char temp=*pBegin;
		*pBegin=*pEnd;
		*pEnd=temp;
		
		pBegin++; pEnd--;
	}
}
char* ReverseSentence(char* pData){
	if(pData==NULL) return NULL;
	
	char* pBegin=pData;
	char* pEnd=pData;
	while(*pEnd!='\0') pEnd++;
	pEnd--;
	
	// 翻转整个句子
	Reverse(pBegin, pEnd); 
	
	// 翻转句子中的每个单词
	pBegin=pEnd=pData;
	while(*pBegin!='\0'){
		if(*pBegin==' '){  // 若字符串开始有空格, 需要跳过 
			pBegin++; pEnd++;
		}else if(*pEnd==' ' || *pEnd=='\0'){
			Reverse(pBegin, --pEnd);
			pBegin=++pEnd;
		}else pEnd++;
	} 
	return pData;
}
int main() {
	char str[]="I am a student.";
	printf("%s", ReverseSentence(str));
	return 0;
}

题目二:左旋转字符串

题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include<cstring>
#include<stack>
#include<cmath>
using namespace std;
void Reverse(char* pBegin, char* pEnd){  // 反转字符串 
	if(pBegin==NULL || pEnd==NULL) return;
	while(pBegin<pEnd){
		char temp=*pBegin;
		*pBegin=*pEnd;
		*pEnd=temp;
		
		pBegin++; pEnd--;
	}
}
char* LeftRotateString(char* pStr, int n){
	if(pStr!=NULL){
		int nLength=static_cast<int>(strlen(pStr));
		if(nLength>0 && n>0 && n<nLength){
			char* pFirstStart=pStr;
			char* pFirstEnd=pStr+n-1;
			
			char* pSecondStart=pStr+n;
			char* pSecondEnd=pStr+nLength-1;
			
			// 翻转字符串的前面 n 个字符
			Reverse(pFirstStart, pFirstEnd);
			
			// 翻转字符串的后面部分 
			Reverse(pSecondStart, pSecondEnd);
			
			// 翻转整个字符串
			Reverse(pFirstStart, pSecondEnd);
		}
	}	
	return pStr; 
}
int main() {
	char str[]="abcdefg";
	printf("%s", LeftRotateString(str, 2));
	return 0;
}
愿你慢慢变强 发布了61 篇原创文章 · 获赞 63 · 访问量 3396 私信 关注

标签:面试题,NULL,58,Offer,char,pBegin,pEnd,字符串,include
来源: https://blog.csdn.net/qq_35340189/article/details/104494450

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

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

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

ICode9版权所有