我需要编写一个程序,提示用户输入一个字符串,然后确定字符串的中间位置,并生成一个新的字符串,用于交换字符串的两半,然后输出结果。
到目前为止我已经
了int main(void) {
char *string = NULL;
char temp[1000];
cout << "Please enter a string" << endl;
cin.getline(temp, 999);
int length = strlen(temp);
string = new char[length];
strcpy(string,temp);
length = length / 2;
return EXIT_SUCCESS;
}
其中包含字符串并存储它。我只需要一种方法将下半部分移动到一个新阵列,我知道我需要使用strcpy(),但我不知道如何正确引用该部分数组。
答案 0 :(得分:1)
由于这是C ++,我将建议使用标准库算法。您要求交换序列的两半,而std::rotate
就是这样做。不幸的是,它会就地进行旋转,并且您希望将结果放在不同的字符串中。
您可以复制字符串,然后进行旋转,但有一个std::rotate_copy
算法可以同时执行(并且比单独的复制/旋转步骤更快)。
char
数组的示例:
#include <algorithm>
#include <cstring>
#include <iostream>
int main()
{
char text[1000], result[1000];
std::cout << "Please enter a string\n";
std::cin.getline(text, 999);
size_t length = strlen(text);
std::rotate_copy(text, text + length / 2, text + length, result);
result[length] = '\0';
std::cout << text << '\n' << result << '\n';
}
std::string
的示例:
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string text, result;
std::cout << "Please enter a string\n";
std::getline(std::cin, text);
size_t length = text.size();
result.resize(length);
std::rotate_copy(text.begin(), text.begin() + length / 2, text.end(), result.begin());
std::cout << text << '\n' << result << '\n';
}
您可以使用std::swap_ranges
,但这假设两个范围都相同。
答案 1 :(得分:0)
如果您尝试使用C,请使用strncpy。但是,我建议使用C ++ std::string
并使用std::string.substr()
和连接。后者对我来说会更容易。
答案 2 :(得分:0)
你已经完成了解决方案的一半。在这里,我使用strncpy完成它以获得第一个和指针增量以获得第二个。
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main(void)
{
char temp[1000];
cout << "Please enter a string" << endl;
cin.getline(temp, 999);
int length = strlen(temp);
char firstHalf[512];
strncpy (firstHalf, temp, length/2);
cout << "firstHalf: " << firstHalf << endl;
char* secondHalf = temp + length/2;
cout << "secondHalf: " << secondHalf << endl;
char* swapped_str = strcat(secondHalf, firstHalf);
cout << "Swapped string: " << swapped_str << endl;
return EXIT_SUCCESS;
}
答案 3 :(得分:0)
std::string text(whatever...);
int sz = text.size() / 2;
for (int i = 0; i < sz; ++i)
std::swap(text[i], text[sz + i]);
当text.size()
为奇数时,这可能会被一个人关闭。