在C中反转字符串而不输出为空
Reversing a string in C without the output being null
我正在尝试使用以下代码反转字符串(字符数组),但是当我尝试打印字符串时,值为 null。这是一项家庭作业,但我正在努力学习,因此我们将不胜感激。
void input_reverse_string(const char* inputStr, char* reverseStr)
{
int i = 0;
int length = 0;
for (; *(inputStr++) != '[=10=]'; i++)
{
length++;
}
while (*inputStr)
{
*reverseStr = *inputStr;
inputStr++;
reverseStr++;
}
const char* chr_ptr = &inputStr[length - 1];
printf("I see a %s\n", *chr_ptr);
*reverseStr = '[=10=]';
printf("%d", length);
/* return reverseStr; */
}
有几件事出了问题:
这是一种计算字符串长度的奇怪方法。你正在使用一个你不需要的索引变量,同时递增 3 个东西,至少可以说是不需要的。
计算长度后,将inputStr
指针递增到末尾,你没有重置指针,所以它仍然指向字符串的末尾(实际上,结束后一个!)。
在 while
内,您正在向同一方向推进两个指针(inputStr
和 reverseStr
),如果您愿意,这不可能是正确的反转 字符串。
正确的做法是:
计算字符串的长度。使用 strlen()
或手动完成,但您实际上只需要增加 one 变量即可。您可以避免递增 inputStr
,只需使用一个临时指针。
从inputStr + length
开始,向后走。使用指针并执行 --
或仅索引字符串)。
这是一个工作示例:
void reverse_string(const char* inputStr, char* reverseStr) {
unsigned len = 0;
int i;
while (inputStr[len])
len++;
for (i = len - 1; i >= 0; i--) {
reverseStr[len - i - 1] = inputStr[i];
}
reverseStr[len] = '[=10=]';
}
int main(void) {
char a[6] = "hello";
char b[6];
reverse_string(a, b);
puts(b);
return 0;
}
输出:
olleh
我正在尝试使用以下代码反转字符串(字符数组),但是当我尝试打印字符串时,值为 null。这是一项家庭作业,但我正在努力学习,因此我们将不胜感激。
void input_reverse_string(const char* inputStr, char* reverseStr)
{
int i = 0;
int length = 0;
for (; *(inputStr++) != '[=10=]'; i++)
{
length++;
}
while (*inputStr)
{
*reverseStr = *inputStr;
inputStr++;
reverseStr++;
}
const char* chr_ptr = &inputStr[length - 1];
printf("I see a %s\n", *chr_ptr);
*reverseStr = '[=10=]';
printf("%d", length);
/* return reverseStr; */
}
有几件事出了问题:
这是一种计算字符串长度的奇怪方法。你正在使用一个你不需要的索引变量,同时递增 3 个东西,至少可以说是不需要的。
计算长度后,将
inputStr
指针递增到末尾,你没有重置指针,所以它仍然指向字符串的末尾(实际上,结束后一个!)。在
while
内,您正在向同一方向推进两个指针(inputStr
和reverseStr
),如果您愿意,这不可能是正确的反转 字符串。
正确的做法是:
计算字符串的长度。使用
strlen()
或手动完成,但您实际上只需要增加 one 变量即可。您可以避免递增inputStr
,只需使用一个临时指针。从
inputStr + length
开始,向后走。使用指针并执行--
或仅索引字符串)。
这是一个工作示例:
void reverse_string(const char* inputStr, char* reverseStr) {
unsigned len = 0;
int i;
while (inputStr[len])
len++;
for (i = len - 1; i >= 0; i--) {
reverseStr[len - i - 1] = inputStr[i];
}
reverseStr[len] = '[=10=]';
}
int main(void) {
char a[6] = "hello";
char b[6];
reverse_string(a, b);
puts(b);
return 0;
}
输出:
olleh