Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;_C++_String Concatenation - Fatal编程技术网

C++ 在C++;

C++ 在C++;,c++,string-concatenation,C++,String Concatenation,我知道在SE中有一个字符串连接问题被问死了。但就我所知,我已经通过了所有的问题,可以帮助我,徒劳 这就是我希望通过该计划实现的目标: 最初我有a=0和b=1,分别是n=0和n=1 对于下一个输入,即从n=3开始,我的结果应该是前两个字符串的串联。(类似于斐波那契序列;只有加法被串联替换) 例如: 对于n=3,我的输出应为“10”。 对于n=4,我的输出应该是“101” 对于n=5,我的输出应该是“10110” 我写的代码在逻辑上没有问题,但是我得到了一个SIGSEGV错误,我不明白为什么 #in

我知道在SE中有一个字符串连接问题被问死了。但就我所知,我已经通过了所有的问题,可以帮助我,徒劳

这就是我希望通过该计划实现的目标:

最初我有a=0和b=1,分别是n=0和n=1

对于下一个输入,即从n=3开始,我的结果应该是前两个字符串的串联。(类似于斐波那契序列;只有加法被串联替换)

例如:
对于n=3,我的输出应为“10”。
对于n=4,我的输出应该是“101”
对于n=5,我的输出应该是“10110”

我写的代码在逻辑上没有问题,但是我得到了一个SIGSEGV错误,我不明白为什么

#include <iostream>
#include<new>
#include<string.h>

using namespace std;

int main()
{
    long int n,i;
    char *a="0";
    char *b="1";
    char *c=new char[100000];

cout<<"Enter  a number n:";
cin>>n;

for(i=0;i<n;i++)
{

    strcat(b,a);
    strcpy(a,b);

}
cout<<"\nRequired string="<<b;
#包括
#包括
#包括
使用名称空间std;
int main()
{
长int n,i;
char*a=“0”;
char*b=“1”;
char*c=新字符[100000];
coutn;
for(i=0;i
strcat(b,a);
调用未定义的行为,因为
b
指向字符串文本

char * strcat ( char * destination, const char * source );
连接字符串 将
字符串的副本附加到
目标
字符串


这是C++,建议您使用 > STD::String 和<代码> +/Cux>运算符。或者<代码> STD::String Strue

< P>您所观察到的问题与未定义的行为有关:您正在写入已分配到字符串文字的内存。

char * strcat ( char * destination, const char * source );

为了避免这个问题,你应该切换到使用C++ <代码> STD::String :它使你的代码通过将内存管理从图片中删除变得简单很多。

string a("0");
string b("1");
int n = 10;
for(int i=0;i<n;i++) {
    string tmp(a);
    a = b;
    b = tmp + b;
}
cout<<"Required string="<<b;
字符串a(“0”);
字符串b(“1”);
int n=10;
对于(int i=0;i
“0”和“1”是
字符串文本
(a的地址为“0”,b的地址为“1”),其内容的更改是
未定义的行为

strcat(b,a);
strcpy(a,b);
乌兰巴托


<> >使用C++时,最好使用<代码> STD::String 或 >

> P>您已声明<代码> A<代码> > <代码> B/C> >

char *a="0"; 
char *b="1";

这些是指向常量字符串的指针。这意味着分配给这些指针的内存是固定的。当您写入超过此内存块时,坏东西(TM)您将使用<代码> STARCAT/COD>。但是您的目标字符串是字符串文字。<代码> STRCAT//COD>然后试图通过写终止空字符的字符串,这就是SEG错误所在。只是不要尝试修改字符串文字。因为您有使用C++的优点,除非这是一个学习。ng练习您最好使用std::string。

您可以使用此代码,我向您展示的是,您需要考虑n=1,2的初始值 此外,还应处理n<0的错误输入 避免动态分配,因为您似乎没有明显的理由使用new,并且忘记了在最后使用delete释放内存

#include <iostream>
#include<new>
#include<string.h>

using namespace std;

int main()
{
    long int n,i;
    char a[10];
    char b[10];
    char c[10];
    //char *c=new char[100000];
    cout<<"Enter  a number n:";
    cin>>n;

    strcpy(a, "0");
    strcpy(b, "1");

    if (n == 1)
        strcpy(b, a);
    else if (n > 2)
    {
        for(i=2;i<n;i++)
        {
            strcpy(c, a);
            strcat(c, b);
            strcpy(a, b);
            strcpy(b,c);
        }
    }
    else if (n != 2)
        cout<<"\nInvalid input!";

    cout<<"\nRequired string="<<b;
#包括
#包括
#包括
使用名称空间std;
int main()
{
长int n,i;
chara[10];
charb[10];
charc[10];
//char*c=新字符[100000];
coutn;
strcpy(a,“0”);
strcpy(b,“1”);
如果(n==1)
strcpy(b,a);
否则,如果(n>2)
{

对于(i=2;我想你忘了使用c:)我确实打算使用“c”,但我发现它是一个不必要的变量:)只是忘了我已经声明了它。是的,我现在明白了:)任务完成:D谢谢你。+1建议
std::string
/
std::stringstream
,你说的次数永远不会太多。我最初尝试过这种方法,虽然它很简单,但随着n值的增加,它对较大的字符串不起作用