gpt4 book ai didi

c++ - 为什么在将 2 个字符串逐个字母连接到第三个字符串时,最终字符串不会显示正确的输出?

转载 作者:行者123 更新时间:2023-11-28 00:21:00 25 4
gpt4 key购买 nike

 /* Write a program that would mix-and-merge two given strings (s1 and s2) into string s3 as follows:
first character of s1, first character of s2, second character of s1, second character of s2, etc. */

我在互联网上找到了这个示例练习,我想我会试一试。一切似乎都很好,代码编译没有错误,但我的“s3”字符串变量不会输出任何内容,它只会保持空白。

说来有趣,但问题似乎出在return 0之前的最后一行;

cout << s3;

如果我这样做:

cout << s3[0];

或者我想要的任何索引,当运行与其他字符串连接的代码时,它将显示正确的字符。那么问题是什么?此处代码供引用:

#include <iostream>
#include <string>

using namespace std;

int main ()
{
string s1, s2, s3;
int i;
int j = 0;

cout << "Type in the first string: ";
getline(cin, s1);
cout << "Type in the second string: ";
getline(cin, s2);

for(i = 0; j < s1.size(); i += 2) // Merge first string by starting at index 0 and moving in 2s hence i += 2.
{
s3[i] = s1[j];
++j;
}

j = 0;

for(i = 1; j < s1.size(); i +=2) // Merge second string by starting at index 1 hence i + 1 and again moving in 2s as to not overwrite an index that s1 put in.
{
s3[i] = s2[j];
++j;
}


cout << s3; // Problem is here?

return 0;
}

最佳答案

使用大于当前长度的运算符 [i] 访问 s3 字符串是未定义的行为。

您可以在循环之前尝试使 s3 足够大(例如填充空格)。请注意,您当前的实现仅在两个字符串长度相同时才有效。

或者,尝试想出不同的方法。例如如果您将字符串 s1s2 放在您面前的小叠纸上(每张纸上有一个字母)并想要合并它们,您会这样做成一个堆栈。

关于c++ - 为什么在将 2 个字符串逐个字母连接到第三个字符串时,最终字符串不会显示正确的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27495097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com