C++ 在C++;
我知道在SE中有一个字符串连接问题被问死了。但就我所知,我已经通过了所有的问题,可以帮助我,徒劳 这就是我希望通过该计划实现的目标: 最初我有a=0和b=1,分别是n=0和n=1 对于下一个输入,即从n=3开始,我的结果应该是前两个字符串的串联。(类似于斐波那契序列;只有加法被串联替换) 例如: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
对于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;istrcat(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值的增加,它对较大的字符串不起作用