我遵循一个示例来反转一个很棒的字符串,但我想使用cin输入该字符串,而不是将值硬编码为char text []。能做到吗?我已经在Google上搜索并找到了各种文章,但到目前为止还无法使它起作用。 我尝试使用c_str()和strcpy(哪个编译器不喜欢我使用)
//Create a char array with text you want to reverse.
char text[] = "hello";
//Get the number of chars in the array, there will be an extra 0 so you need to take 1 away.
int nChars = sizeof(text) - 1;
cout << nChars << endl;
//Make pointer start equal to the text array.
char *pStart = text;
//Make pointer end equal to the text array + number of characters minus 1.
//char *pEnd = text + nChars - 1;
char *pEnd = text + nChars - 1;
cout << pEnd << endl;
//While the start of the pointer is less than the end pointer.
cout << pStart << " " << pEnd << endl;
while (pStart < pEnd) {
//Save the character at the location of the start pointer.
char save = *pStart;
//Make the start pointer equal to the last pointer.
*pStart = *pEnd;
//Write the saved character to the end pointer.
*pEnd = save;
//Move the start pointer up 1 slot.
pStart++;
//Move the end pointer back 1 slot.
pEnd--;
}
//output text in reverse.
cout << text << endl;
return 0;
}
答案 0 :(得分:1)
但是我想使用cin输入字符串,而不是将值硬编码为
char text[]
。
使用c std::string
而不是原始char数组很容易做到:
std::string text;
// ...
std::getline(cin,text);
其余的代码可以在const char*
返回的text.c_str()
指针上工作,或者甚至更好地使用字符串的rbegin()
和rend()
迭代器来获得尊敬的副本:
std::copy(text::rbegin(), text.rend(),std::begin(text));
从c ++ 17开始,您还可以使用std::reverse()
函数来做到这一点:
std::reverse(text.begin(), text.end());
答案 1 :(得分:0)
如果您不喜欢std::string
,则有很多方法可以读取字符数组。
注意:读入字符数组可能会使数组溢出。另外,数组中必须有一个NUL终止符,才能将该数组视为C样式的字符串。
cin
您可以使用cin
来读取字符数组。
char my_array[8];
std::cin >> my_array;
此技术将跳过初始空白,然后将字符读入my_array
,直到遇到空白或输入终止。
注意:如果输入大于数组大小,则输入将继续写入数组末尾,从而导致未定义的行为。制作大量数组可能会浪费内存。
read
您可以使用read
方法读取固定数量的字符:
静态const unsigned int LIMIT = 16;
char your_array[LIMIT];
std::cin.read(your_array, LIMIT);
使用上面的代码,您需要将NUL终止符放置在适当的位置:
size_t count = std::cin.gcount();
if (count == LIMIT)
{
--count;
}
your_array[count] = '\0';
std::string
:首选项是使用std::string
:
std::string input_text;
std::cin >> input_text; // Read space separated text, i.e. a *word*.
std::getline(std::cin, input_text); // Read a line of text.
答案 2 :(得分:-1)
int ReverseStringProg() {
string text;
cout << "Please enter a value that you would like to reverse: " << flush;
cin >> text;
std::reverse(text.begin(), text.end());
cout << text;
return 0;
}