本文主要是介绍经典算法--字符串倒置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这个就很简单了,直接发代码吧!
#include<iostream>
#include<string>
using namespace std;string reverse(string s)
{for(int i=0,j=s.length()-1;i<j;++i,--j){char c=s[i];s[i]=s[j];s[j]=c;}return s;
}int main()
{string s="abcdefghijk";cout<<reverse(s);system("pause");return 0;
}
算法很简单,就不细说了。这里要注意的是length和strlen的区别。
两者都是求字符串的长度。
length(“abcd”)的值为5,包含后面的一个’\0’
strlen(“abcd”)的值为4,不计算后面的’\0’
但strlen的参数必须是char*,而s.length()是String类型的对象s的成员方法。所以他们用在不同的地方。
举个例子:
char* ch = “sdsfdsdf”;
String s = “sdsadsd”;
cout<
int strlen(const char *str)
{assert(str!=NULL);//断言字符串地址非0int len;while((*str++)!='\0'){len++;}return len;
}
扩展:
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”**
算法思想:先颠倒句子中的所有字符。这时,不但翻转了句子中单词的顺序,而且单词内字符也被翻转了。我们再颠倒每个单词内的字符。由于单词内的字符被翻转两次,因此顺序仍然和输入时的顺序保持一致。
以上面的输入为例子。翻转“I am a student.”中所有字符得到“.tneduts a ma I”,再翻转每个单词中字符的顺序得到“students. a am I”,正是符合要求的输出
char* reverse(char* pBegin,char* pEnd)
{if(pBegin==NULL||pEnd==NULL){return NULL;}while(pBegin<pEnd){char temp=*pBegin;*pBegin=*pEnd;*pEnd=temp;pBegin++;pEnd--;}return pBegin;
}char* ReverseSetence(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++;continue;}else if(*pEnd==' '||*pEnd=='\0'){reverse(pBegin,--pEnd);pBegin=++pEnd;}else{pEnd++;}}return pData;}
这篇关于经典算法--字符串倒置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!