字符串操作4
程序员文章站
2022-07-14 19:42:03
...
1 实现字符串的翻转: 如-- Thank you for all your time→ Thank you for all your time
2 完成字符串的替换:如:Thank you for all your time 把空格键 替换成 %20.
1 实现字符串的翻转: 如-- Thank you for all your time→ Thank you for all your time
思路:
1 整体翻转字符串
2 翻转每一个单词(使用 ' '或者是其他的 标点符号 进行分割)
void ReverserTheword( char *strIn, int lenWorld )
{
assert(strIn!=NULL);
char tmp;
for(int i=0;i<lenWorld/2;i++)
{
tmp=strIn[i];
strIn[i]=strIn[lenWorld-1-i];
strIn[lenWorld-1-i]=tmp;
}
cout<<"翻转后的字符串是:"<<strIn<<endl;
}
//nihao ok dajia. →aijad ko oahin →dajia ok nihao
int ReverseTheWords( char *strIn )
{
assert(strIn!=NULL);
char *head=strIn;
int lenWord;
char* everyWord;
cout<<head<<endl;
ReverserTheword(head,strlen(head));
while(*strIn!='\0')
{
//两种情况退出循环:1 遇到字符串结束(一个单词) 2 遇到空格键 或者其他的比如 ,.之类的可以改写(一个单词)
/*cout<<strIn<<endl;*/
everyWord=strIn;
lenWord=0; //记录每一个单词的起始位置以及长度。
while(*strIn!='\0')
{
if(*strIn==' ')
{
strIn++;
break;
}
else
{
strIn++;
lenWord++;
}
}
ReverserTheword(everyWord,lenWord);
}
//ReverserTheword(head,strlen(head)); //这一步放在前面和后面都是一样的啊,哈哈。
cout<<"最后的结果是:"<<head<<endl;
return 1;
}
测试代码
////char *str="the important things."; //这样写会发生错误的,常量字符串不能够改变其中的内容。
char str[]="Thank you for all your time.";
ReverseTheWords(str);
2 完成字符串的替换:如:Thank you for all your time 把空格键 替换成 %20.
思路:找到 src(要改变的字符串)的首字符进行 字符串的匹配,匹配后 进行替换。
注意:标记 tmp,str的起始位置,无论是 strcpy还是 cout<<strAddress;,还有就是匹配和复制字符串(src和dst)的起始位置需要标记。否则 指针变化后无法得到正确的结构。
bool isSubString( char * str, const char * src )
{
assert(str!=NULL&&src!=NULL);
while(*src!='\0')
{
if(*str!=*src)
{
return false;
/*break;*/
}
str++;
src++;
}
return true;
}
void replaceString( char *str, const char *src, const char *dst )
{
assert(str!=NULL&&src!=NULL&&dst!=NULL);
cout<<str<<endl;
int lenstrlen(src);
char *tmp=new char[100];
memset(tmp,'1',100);
char *addressTemp=tmp,*addressStr=str,*tmpDest;
while(*str!='\0')
{
//每一个单词 用 src来分割
if(*str==*src&&isSubString(str,src))
{
str+=lenSrc;
//复制 dest字符串
tmpDest=(char*)dst;
while(*tmpDest!='\0')
{
*tmp++=*tmpDest++;
}
}
else
{
*tmp++=*str++;
}
}
*tmp='\0';
cout<<addressTemp<<endl;
//strcpy(str,tmp); //错误,因为指针已经发生了变化,必须要记住 初始化的位置的指针。
strcpy(addressStr,addressTemp);
delete[] addressTemp; //delete[] tmp; 错误的
}
测试代码:
//char *str="Thank you for all the time.";
//错误:因为 指针指向的是 静态存储的常量区,不能改变str的值。
char str[100]="Thank you for all the time.";
replaceString(str," ","%20");
转载于:https://blog.51cto.com/5037939/1311047
上一篇: swift 4.x 字符串的操作
下一篇: java_4.字符串的操作