// StrOperate.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
/*本源文件总结了一些操作字符串的相关函数,
所用开发工具:vs2010,空的控制台应用程序。
----西德德2013-10*/
/*以下是根据具体需求自己加上的头文件*/
#include <iostream>
#include <string>
#include <cassert> //断言 assert 所用到的头文件
using namespace std;
/*求字符串s的倒序*/
char* reverse (char* s)
{
char tempchar;
int nLen = strlen(s);
//之所以是nLen/2(取整),因为倒序一个字符串相当于以中间为界,两边对应的字符串交换位置。
for(int i = 0; i<nLen/2; i++)
{
tempchar = *(s+nLen-1-i) ;
*(s+nLen-i-1) = *(s+i);
*(s+i) = tempchar;
}
return s;
}
/*写个函数 将字符串按单词反转 如 i love sunny 转成 sunny love i*/
char* WordReverse(char* s)
{
int len = strlen(s);
char tmp[24];
int i , j , start = 0;
s = reverse(s);
for( i = 0; i<len; i++)
{
if(*(s+i)!=' ')
tmp[i - start] = *(s+i);
else
{
tmp[i - start] = '\0';
reverse(tmp);
cout<<"tmp:"<<tmp<<endl;
for( j = start; j<i; j++ )
*(s + j) = tmp[j - start];
start = i + 1;
}
}
tmp[i - start] = '\0';
reverse(tmp);
cout<<"tmp:"<<tmp<<endl;
for( j = start; j<i; j++ )
*(s + j) = tmp[j - start];
return s;
}
/*完美版strlen*/
int kone_strlen( const char *str )
{
assert(str != NULL);
int len = 0;
while((*str++)!='\0')
{
len++;
}
return len;
}
/*串拷贝函数*/
char* kone_strcpy(char* strDest , char* strSrc)
{
if ( (strDest==NULL)||(strSrc==NULL) ) //[1]检查指针有效性
throw "Invalid argument(s)"; //[2]抛出异常
//assert((strDest!=NULL) && (strSrc !=NULL)); //本句可完美代替 [1][2]
char * strDestCopy = strDest; //[3]保存原始的strDest值
while ((*strDest++=*strSrc++)!='\0'); //[4]
return strDestCopy; //返回char * :实现链式表达式
}
/*去掉串中的所有空格*/
char* AllTrim(char* str)
{
char* p = str;
char *pflag = NULL;
while(*p!='\0')
{
if (*p == ' ')
{
pflag = p;
while( *pflag!='\0' )
{
*pflag = *(pflag+1);
pflag++;
}
}
else p++;
}
return str;
}
/*字符串循环右移n个字符*/
void LoopMove( char *pStr, int steps )
{
/*方法一:*/
int n = strlen( pStr ) - steps;
char tmp[255];
strcpy ( tmp, pStr + n );
strcpy ( tmp + steps, pStr);
*( tmp + strlen ( pStr ) ) = '\0';
strcpy( pStr, tmp );
/*方法二:
int n = strlen( pStr ) - steps;
char tmp[254];
memcpy( tmp, pStr + n, steps );
memcpy(pStr + steps, pStr, n );
memcpy(pStr, tmp, steps ); */
}
/*主函数*/
int _tmain(int argc, _TCHAR* argv[])
{
/*串的倒序测试、strlen测试:
char c[24];
cout<<"please input the string:"<<endl;
cin>>c;
cout<<"input string length : "<<kone_strlen(c)<<endl;
cout<<"before:"<<c<<endl;
cout<<" after:"<<reverse(c)<<endl;
*/
/*按单词倒序串测试:*/
char cs[] = {" 12 34 567 8 "};
cout<<"<"<<WordReverse(cs)<<">"<<endl;
/*串拷贝测试、去掉串中的所有空格测试:
char src[] = {" 123 45 "};
char dest[] = {" he llo "};
cout<<kone_strcpy(dest,src)<<endl;
cout<<"去掉串中空格之后kk"<<AllTrim(src)<<"oo"<<endl;
*/
/*循环右移测试:
char strMove[] = {"12345678"};
LoopMove(strMove , 3);
cout<<"右移n位"<<strMove<<endl;
*/
return 0;
}
字符串的各种操作
最新推荐文章于 2023-08-12 10:48:35 发布