在 C++ 中使用 Cstrings 反转字符串
Reverse a string using Cstrings in C++
我正在尝试获取用户输入并将其反转以供稍后比较。看起来我正朝着正确的方向前进,但我似乎无法弄清楚为什么我的方法只有 return 一个字母。当我 cout reversedInput 时,它应该 return 整个 Cstring 反转。
#include <cstring>
#include <iostream>
#include <stdio.h>
using namespace std;
void reverseString(char arr[100]);
char reversedInput[100];
int main() {
char input[100];
cout<<"Please enter a string"<<endl;
cin.getline(input, 100);
cout<<"You entered "<<input<<endl;
reverseString(input);
cout<<"The reverse is "<<reversedInput<<endl;
system("pause");
return 0;
}
void reverseString (char arr[]) {
int i;
int j = strlen(arr) - 1;
char temp;
for (i = 0; i < j; i++, j--) {
temp = arr[j];
// arr[j];
reversedInput[i] = temp;
}
}
如果你想在全局数组 reversedInput
中以相反的方式存储数组 arr
的内容,那么一种方法是这样,尽管 Why Global Variables Should Be Avoided When Unnecessary?
void reverseString (char arr[]) {
for (size_t i = 0, j = strlen(arr); j-- > 0 ; i++) { /* change the condition from i<j to j>=0*/
reversedInput[i] = arr[j]; /* filling in global array in reverse order */
}
reversedInput[i] = '[=10=]'; /* terminate with [=10=] */
}
根本问题是 i < j
在你的条件中。当您下降源字符串时,j
递减而 i
递增,最终在字符串的中途相遇,留下一半未被复制。
void reverseString(const char arr[])
{
size_t len = strlen(arr);
for (size_t i = 0; len-- > 0; ++i)
reversedInput[i] = arr[len];
}
注意,避免计算 strlen(arr)-1
是有意的。考虑将 when/if 传递给此函数的 empty 字符串会变成什么。 (提示:无符号类型合法下溢到它们的最大值)。
也就是说,这里有很多潜在的担忧,特别是超过 reversedInput
的大小的可能性,依赖于它是静态的(因此零填充所以一个自由终止符),以及副作用首先修改全局(应该是输出参数)。但核心问题是条件之一。
假设输入字符串是 "nitendra" 并且您想要反转它。您可以反转字符串,只需将第一个字符与最后一个字符交换,然后将第二个字符与倒数第二个字符交换,依此类推。直到(字符串长度)/2.
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
void reverseString(char arr[100]);
char reversedInput[100];
int main() {
char input[100];
cout<<"Please enter a string"<<endl;
cin.getline(input, 100);
cout<<"You entered "<<input<<endl;
reverseString(input);
cout<<"The reverse is "<<input<<endl;
system("pause");
return 0;
}
void reverseString (char* arr)
{
size_t len = std::strlen(arr);
for(size_t i=0;i<(size_t)(len/2);++i)
{
std::swap(arr[i], arr[len-i-1]);
}
}
我正在尝试获取用户输入并将其反转以供稍后比较。看起来我正朝着正确的方向前进,但我似乎无法弄清楚为什么我的方法只有 return 一个字母。当我 cout reversedInput 时,它应该 return 整个 Cstring 反转。
#include <cstring>
#include <iostream>
#include <stdio.h>
using namespace std;
void reverseString(char arr[100]);
char reversedInput[100];
int main() {
char input[100];
cout<<"Please enter a string"<<endl;
cin.getline(input, 100);
cout<<"You entered "<<input<<endl;
reverseString(input);
cout<<"The reverse is "<<reversedInput<<endl;
system("pause");
return 0;
}
void reverseString (char arr[]) {
int i;
int j = strlen(arr) - 1;
char temp;
for (i = 0; i < j; i++, j--) {
temp = arr[j];
// arr[j];
reversedInput[i] = temp;
}
}
如果你想在全局数组 reversedInput
中以相反的方式存储数组 arr
的内容,那么一种方法是这样,尽管 Why Global Variables Should Be Avoided When Unnecessary?
void reverseString (char arr[]) {
for (size_t i = 0, j = strlen(arr); j-- > 0 ; i++) { /* change the condition from i<j to j>=0*/
reversedInput[i] = arr[j]; /* filling in global array in reverse order */
}
reversedInput[i] = '[=10=]'; /* terminate with [=10=] */
}
根本问题是 i < j
在你的条件中。当您下降源字符串时,j
递减而 i
递增,最终在字符串的中途相遇,留下一半未被复制。
void reverseString(const char arr[])
{
size_t len = strlen(arr);
for (size_t i = 0; len-- > 0; ++i)
reversedInput[i] = arr[len];
}
注意,避免计算 strlen(arr)-1
是有意的。考虑将 when/if 传递给此函数的 empty 字符串会变成什么。 (提示:无符号类型合法下溢到它们的最大值)。
也就是说,这里有很多潜在的担忧,特别是超过 reversedInput
的大小的可能性,依赖于它是静态的(因此零填充所以一个自由终止符),以及副作用首先修改全局(应该是输出参数)。但核心问题是条件之一。
假设输入字符串是 "nitendra" 并且您想要反转它。您可以反转字符串,只需将第一个字符与最后一个字符交换,然后将第二个字符与倒数第二个字符交换,依此类推。直到(字符串长度)/2.
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
void reverseString(char arr[100]);
char reversedInput[100];
int main() {
char input[100];
cout<<"Please enter a string"<<endl;
cin.getline(input, 100);
cout<<"You entered "<<input<<endl;
reverseString(input);
cout<<"The reverse is "<<input<<endl;
system("pause");
return 0;
}
void reverseString (char* arr)
{
size_t len = std::strlen(arr);
for(size_t i=0;i<(size_t)(len/2);++i)
{
std::swap(arr[i], arr[len-i-1]);
}
}