c++字符串替换中while和strcpy具体用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++字符串替换中while和strcpy具体用法相关的知识,希望对你有一定的参考价值。

字符串替换、取子串函数实现2008年05月18日 星期日 16:41/*****************************************************************************************************************************
* 函数原型:char* str_rep(char *str, const char *strSearch, const char *strReplace)

* 描述:字符串替换,查找字符串,把字符串中strSearch字符串替换为strReplace
* 输入参数:三个字符串
* 输出参数:替换后的str
* 返回值:成功返回指向str的指针,失败(如传入NULL参数)返回NULL
* 分析:字符替换过程中不考虑内存溢出问题,str如果被替换后变长,要有足够空间容纳新增字符和null字符
* 改进:可以增加一个参数,传入所能容纳的最大长度,在函数里必要时判断新串是否到达最大长度
*******************************************************************************************************************************/

#include <stdio.h>
#include <string.h>

char* str_rep(char *str, const char *strSearch, const char *strReplace)

char *pTemp = str;
int iStrSearlen, iStrReplen, iTemp;

if (str == NULL || strSearch == NULL || strReplace == NULL)

return NULL;


iStrSearlen = strlen(strSearch);
iStrReplen = strlen(strReplace);
iTemp = iStrSearlen - iStrReplen;

if( iStrSearlen == 0 ) //如果查找字符串的长度为0(调用strstr()函数前必须考虑的),直接返回

return str;


while(pTemp = strstr(pTemp, strSearch)) //匹配到字符串,进行替换。

const char *p = strReplace;
if(iTemp < 0)

int i = strlen(str);
while (i >= pTemp-str+iStrSearlen) //i >= pTemp-str+iStrlen

str[i-iTemp] = str[i]; //整体向后移动-iTemp位(包括最后的'\0'),注意iTemp<0
i--;

while(*p != '\0') //替换字符串

*pTemp++ = *p++;


else

while(*p != '\0')

*pTemp++ = *p++;


if(iTemp > 0) //如果匹配字符比替换字符长,则整体左移iTemp位

strcpy(pTemp, pTemp+iTemp);



return str;


//用strncpy(substr, str+begin, len);就是substr了
char* str_sub(char *substr, const char *str, size_t begin, size_t len)

strncpy(substr, str+begin, len);
substr[len] = '\0';

return substr;


int main()

char str1[10]="123456789";
char str2[10]="abcdefghi";
char *p;
str1[6]='\0';

puts(str1);
p = str_rep(str1, "12", "1212");
if (p)

puts(p);

while(pTemp = strstr(pTemp, strSearch))
while (i >= pTemp-str+iStrSearlen)
strcpy(pTemp, pTemp+iTemp);
都是什么意思啊?

怎么编得这么复杂?
看我的:
/*extracting substring*/

#include <iostream>

using namespace std;

char *subString(const char * const s, int start, int end)

char * pNewString = new char[end - start + 1];

int j = 0;
for (int i = start; i < end; i++, j++)

pNewString[j] = s[i];


pNewString[j] = \'\\0\';

return pNewString;


int main()

char *s = "Atlanta, Georgia";
cout << subString(s, 0, 7) << endl;;

return 0;
参考技术A 你QQ多少.教教我好吗?我QQ435289889

strcpy函数用法

strcpy()是C中的一个复制字符串的库函数,在C++中现在编译器要求使用strcpy_s(),提高安全性,效果是一样的,只是防止源串的长度比目的串的长度大,导致最终的内存越界

函数声明及实现代码:

char* strcpy(char*dst, const char*src)
char* strcpy(char*dst, const char *src)
{
    if ((dst == NULL) || (src == NULL))
        return NULL;
    char *ret = dst;  //[1]
    while ((*dst ++= *src++) != ‘‘);   //[2]
        return ret;   //[3]
}

1)const 修饰:源字符串参数用const修饰,防止修改源字符串;

(2)空指针检查:源指针和目的指针都有可能会出现空指针的情况,所以应该对其进行检查;

(3)为什么要设置ret 指针以及返回ret指针的位置[3],由于目的指针dst已经在进行移动了,所以用辅助指针ret表明首指针;

(4)以上所示[2]处,为简单的字符串的复制过程,正好表明strcpy函数遇到‘‘将会停止;

(5) [3]处返回指针类型,是因为可以连续赋值,作为左值

在C++中strcpy运行时,会提示不安全,要想实现同样的功能,需要自己把该功能换一个名字实现相同的代码,调用strcpy_s时,类似于赋值,直接把目的字符串的换成了源字符串,目的字符串后面的字符无法再通过数组下标获取到,这点很奇怪,不知道是哪里出了问题?

以上是关于c++字符串替换中while和strcpy具体用法的主要内容,如果未能解决你的问题,请参考以下文章

strcpy函数用法

C语言中strcpy的用法! 要举例哦!简单的哦!

strcpy和strncpy用法和区别

字符串转整形

c语言中strcmp的用法

C++编程,查找字符串子串并替换。