'text1‘是一个句子。我希望'text2‘在'text1’中包含句子的第一个单词(第一个空格之前的所有字母)。
代码编译成功,但在执行时,屏幕上不会显示任何内容。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int i,k,c;
bool done=false;
string text1,text2;
getline(cin, text1);
for(i=0; i<text1.size(); i++)
{
if(text1[i]==' ' && done==false)
{
c=i;
for(k=0; k<i; k++)
{
text2[k]=text1[i-c];
c--;
}
done=true;
}
}
cout<<text2<<endl;
return 0;
}发布于 2021-05-11 20:12:55
因为text2是空的,所以你不能做text2[k]=text1[i-c],你需要先调整它的大小。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int i,k,c;
bool done=false;
string text1,text2;
getline(cin, text1);
for(i=0; i<text1.size(); i++)
{
if(text1[i]==' ' && done==false)
{
c=i;
text2.resize(i);
for(k=0; k<i; k++)
{
text2[k]=text1[i-c];
c--;
}
done=true;
}
}
cout<<text2<<endl;
return 0;
}发布于 2021-05-11 19:54:08
使用text2.push_back(text1[i-c]) (API),因为使用text2[k]索引到空字符串(这就是text2 )会调用未定义的行为。该索引操作不会改变text2的长度(或其内容)。
https://stackoverflow.com/questions/67486145
复制相似问题