我试图将用户获得的某些字符串数组的前半部分与后半部分交换,而不知道数组的大小。这是我的尝试。
#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 == '\0') {
n = i / 2;
strcpy(string1, string1+n);
strcat(string1, string1);
}
}
cout << string1 << endl;
return EXIT_SUCCESS;
}
答案 0 :(得分:2)
虽然这可能是家庭作业,但这是学习标准库的绝佳机会。你正在做的只是一个简单的轮换,并且有一个algorithm:
std::rotate(string1, string1 + std::strlen(string1) / 2,
string1 + std::strlen(string1));
完成你所需要的一切,抛弃你容易出错的循环!
此外,您应该使用const int size = somesize
或更好std::string
代替char[]
。如果您使用后者,请使用std::string::size
代替strlen
。
答案 1 :(得分:0)
使用 strlen(string1)查找变量 string1 的长度。
也许您应该考虑使用c ++功能来完成您想要的工作。
使用 std :: string 类比 char数组方法更灵活,因为它可以读取任意数量的字符并且不会被分隔大小变量。
#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;
}
您的代码段有一些问题可能没有考虑过。