如何组合两个字符串?

use*_*858 1 c++ string strlen

这个问题需要在不使用<string>头文件的情况下组合两个字符串(前面的较长的字符串和较长的字符串后面的较短的字符串).每个字符串输入不能超过20个字符.我背后的逻辑是:

  1. 第一次使用strlen获得的长度str1str2,
  2. 用于str3存储较长的字符串,并str4存储较短的字符串.
  3. 添加str3str4str5

这是我的代码:

#include<iostream>
using namespace std;

int main()
{
    // combine two strings , longer in the front, and shorter 
    // after it. do not use strcat
    char str1[20],str2[20],str3[20],str4[20],str5[40];
    // str1 and str2 stores original data, str3 stores longer 
    // and str4 stores shorter, str5 stores total
    int j=0;
    cin.getline(str1,20);
    cin.getline(str2,20);
    if(strlen(str1)<=strlen(str2))
    // give longer string value to str3,shorter to str2
    {
        for (int i=0;i<20;i++)
        {
            str3[i]=str2[i];
            str4[i]=str1[i];
        }
    }
    else
    {
        for (int i=0;i<20;i++)
        {
            str3[i]=str1[i];
            str4[i]=str2[i];
        }
    }
    for(j=0;str3[j]!='\0';j++)
    {
        str5[j]=str3[j];
    }
    for(int i=j;i<40;i++)
    for(int m=0;m<20;m++)
    {
        str5[i]=str4[m];
    }
    cout<<str5<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

在此输入图像描述

这是我的问题?这两个字符串之间的字符是什么?谢谢!!

Kon*_*lph 5

特别是因为您明确提到作为初学者,解决方案是使用std::string:

#include <iostream>
#include <string>

int main() {
    std::string a;
    getline(std::cin, a);

    std::string b;
    getline(std::cin, b);

    // Ensure that the longer string goes to the front.
    if (a.size() < b.size());
        swap(a, b);

    std::string result = a + b;

    std::cout << result << '\n';

    // Or, simply:
    std::cout << a << b << '\n';
}
Run Code Online (Sandbox Code Playgroud)

这里的信息是,C++尽管有其怪癖,但如果你依赖它的库而不是从头开始实现每个低级操作,那么它是一种非常高级的语言.