如何将数组的前半部分与大小未知的后半部分交换

How do you swap first half of an array with second half with an unknown size

我试图在不知道数组大小的情况下将用户获得的某个字符串数组的前半部分与后半部分交换。这是我的尝试。

#include <iostream> 
#include <cstring>

using namespace std;

int main() {

int size;

char string1[size]; 
char *string1Ptr;

cout << "Please enter a string: ";
cin.getline(string1, size);

for (int i = 0; i < size; i++){
    string1Ptr = &string1[i];
    int n = 0;
    if(*string1Ptr == '[=10=]') {
        n = i / 2;
        strcpy(string1, string1+n);
        strcat(string1, string1);
    }
}

cout << string1 << endl;

return EXIT_SUCCESS; 
}

虽然这可能是家庭作业,但这是学习标准库的好机会。你所做的只是一个简单的旋转,为此有一个 algorithm

std::rotate(string1, string1 + std::strlen(string1) / 2,
            string1 + std::strlen(string1));

做你需要的一切,扔掉容易出错的循环!

您还应该使用 const int size = somesize 或更好的 std::string 而不是 char[]。如果使用后者,请使用 std::string::size 而不是 strlen.

使用strlen(string1)求出变量string1.

的长度

也许您应该考虑使用 c++ 功能来完成您想要的工作。

使用 std::string class 比 char array 方法更灵活,因为它可以读取任何数字的字符,它不是由 size 变量分隔的。

#include <iostream>
#include <string>

using namespace std;

int main() {

  string string1;
  getline(cin, string1); // Here, string 1 contains all the characters until a newline character is found.

  // Get the string length
  int n = string1.length();

  // Swaps the first half with the second half.
  string swapped_string = string1.substr(n/2, n/2 + 1) + string1.substr(0, n/2);

  cout << swapped_string << endl;

  return EXIT_SUCCESS;
}

您的代码片段存在一些您可能没有考虑到的问题。

  1. 变量大小没有初始化。
  2. 不能用非常量变量定义固定大小的数组。 (char string1[大小])
  3. strcpy() 如果 (strlen(string1) > size/2) 导致缓冲区溢出。
  4. 当您输入 if( ) 语句,因为这样就完成了数组前半部分与后半部分的交换。