我正在尝试接受用户输入,然后将其反转以进行比较。看起来我朝着正确的方向前进,但是我似乎无法弄清楚为什么我的方法只返回一个字母。当我关闭reversedInput时,它应该返回整个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;
}
}
答案 0 :(得分:2)
根本问题是您的条件中的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
。请考虑当/如果您将 empty 字符串传递给此函数,将会发生什么情况。 (提示:合法的未签名类型会最大程度地溢出)。
也就是说,这里有很多潜在的问题,特别是有可能超过reversedInput
的大小,依靠它是静态的(因此零填充,因此是一个自由终止符),以及修改a的副作用全局(应该是输出参数)。但是核心问题是有条件的问题之一。
答案 1 :(得分:0)
如果要以相反的方式将数组arr
的内容存储在全局数组reversedInput
中,则一种方法是这种方式,尽管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] = '\0'; /* terminate with \0 */
}
答案 2 :(得分:-1)
假设输入字符串为“ nitendra”,并且您想反转它。您可以反转字符串,只需将第一个字符与最后一个字符交换,然后将第二个字符与第二个最后一个字符交换,依此类推..直到(字符串的长度)/ 2。
x[, value := sapply(seq_len(.N), function(i)
paste(value[seq(i)], collapse = "_")), by = group]
x
# group row_id value
#1: A 1 a
#2: A 2 a_b
#3: A 3 a_b_c
#4: B 1 d
#5: B 2 d_e