【发布时间】:2016-07-15 12:21:02
【问题描述】:
这是我的任务:
实现反转空终止字符串的功能。该函数的原型是void Reverse(char *ptr);。不要使用标准库函数。
这是我现在的代码:
void Reverse(char *ptr) {
char *newString;
char ch = *ptr;
unsigned int size = 0;
for (int i = 1; ch != '\0'; i++) {
ch = *(ptr + i);
size++;
}
newString = (char*)malloc(size);
for (int left = 0, right = size - 1; left < size; left++, right--) {
*(newString + left) = *(ptr + right);
}
printf("%s", newString);
printf("\n");
}
它反转字符串并将其保存在 newString 中
我的第一个问题是,当我打印 newString 以查看函数是否正常工作时,字符串是反转的,但在它之后有一些符号。
例如:
如果我在main 方法中有char *str = "hello"; 和Reverse(str);
printf("%s", newString) 的结果将是 olleh****。
但是如果改变
newString = (char*)malloc(size); 到
newString = (char*)malloc(1); 工作正常。
我的第二个问题是我不知道如何将 newString 保存到给定的字符串中。我正在使用新的字符串,因为给定的字符串无法更改。
【问题讨论】:
-
空终止......
-
是返回一个反向字符串,还是简单地反向打印?
-
malloc不算标准库函数? -
彼得我也无法理解,如果我必须打印或退回它。
-
请考虑您可以通过连续交换就地反转字符串。例如,字符串
"james"。如果你交换第一个和最后一个字符,你会得到"samej"。如果你交换第二个和倒数第二个,你会得到"semaj",这是反转的字符串。我将把编写循环的任务留给你。
标签: c string algorithm pointers reverse