从开始到结束第2部分复制字符串

时间:2016-03-11 20:08:21

标签: c++

好的,这就是我现在一直在与之斗争的东西,我一直无法取得成果,我怎么能从头到尾复制一切,Code看起来像这样

#include <stdio.h>
#include <stdlib.h>
#include <iosteream>
#include <Windows.h>

using namespace std;

int main()
{
    char name[50] = "Jason Statham";
    char *namesearch = strstr(name,"Jason"); // get position
    std::copy(name); //Copy Full Details concerning name From beginning to end. - problem
    MessageBoxA(NULL, (char*)name, "", MB_OK);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

要使用copy(),您首先需要加入<algorithm>。然后你可以这样做:

    if(namesearch) // make sure string was found
       std::copy(namesearch,  name+sizeof(name), name); 

其中namesearch是要复制的起始元素,name+sizeof(name)(或更好namesearch+strlen(namesearch)+1)是要复制的最后一个元素,name是目标。

在你的例子中,你不会看到任何特别的东西,因为&#34; Jason&#34;已经在开始了。

修改

如果您想插入,则无法使用copy(),但必须使用copy_backward()

    char *insertpoint = name + 5; // at the end of Jason
    char middle[] = " Donbell";
    std::copy_backward(insertpoint, insertpoint+strlen(insertpoint)+1, insertpoint+strlen(insertpoint)+1+strlen(middle));
    std::copy(middle, middle+strlen(middle), insertpoint);

但是这段代码只是一个概念证明,因为在任何情况下你都需要检查你的插入是否会产生缓冲区溢出(即strlen(name)+1+strlen(middle)<sizeof(name)

因此,如果您打算进行大量的字符串操作,我强烈建议您查看std::string()

以下是它的样子:

string nm = "xx Jason Statham";
auto ns = nm.find("Jason");   // find the start of "Jason"
if (ns!=std::string::npos) {  // if it was found....
   nm = nm.substr(ns);           // take a substring starting at the found position
   nm.insert(5, " Donbell");     // insert a string at poistion 5 
}                              // and all this without risk of buffer overflow !