如何解决使用指针索引尝试反转 c 中的字符串
void funrev( char * str)
{
int n = strlen(str);
char *ptr2 = (char*)malloc( n +1);
char* ptr = ptr2;
while( *str)
{
str++;
}
int i;
for(i =0; i <=n ; i++)
{
*(ptr++) = str[--n];
}
*ptr = '\0';
printf(" rev %s",ptr2);
}
我正在尝试使用指针索引反转字符串,使用索引递减指针并分配给指针。请指出这有什么问题。
解决方法
您正在将 str
指针移动到字符串的末尾:
while( *str) {
str++;
}
然后索引过去:
*(ptr++) = str[--n]
这个字节 str[--n]
是 n-1
个字符传递给结尾 str
,这可能不是你想要的。这里也有其他错误,比如您减少 n
和 增加 i
,这也可能不是您想要的。
您的代码的工作版本可能如下所示:
void funrev(const char *str)
{
int n = strlen(str);
char *reversed = malloc(n + 1);
const char *end_of_str = str + n;
for (size_t i = 0; i < n; i++)
reversed[i] = *(--end_of_str);
reversed[n] = 0;
printf("rev %s\n",reversed);
free(reversed);
}
,
您需要创建本地版本吗?您正在返回 void
,所以我假设您想要反转 str
,这可能比您正在做的更清楚。它使用 char
来交换前导和尾随字符。
void funrev(char* str)
{
size_t len = strlen(str);
if (len < 2)
{
return; /* nothing to do */
}
char *lp = str; /* pointer to lead character */
char *tp = str + len - 1; /* pointer to tail character */
char swap;
size_t loops = len / 2; /* fractional part is truncated */
for (size_t loop = 0; loop < loops; loop++)
{
swap = *lp; /* swap */
*lp = *tp;
*tp = swap;
lp++; /* increment lead pointer */
tp--; /* decrement tail pointer */
}
return;
}
,
void funrev( char * str)
{
int n = strlen(str);
char *ptr2 = (char*)malloc( n +1);
char* ptr = ptr2;
while( *str)
{
str++; // error1: moving str pointer..; why is the requirement for this?
}
int i;
for(i =0; i <=n ; i++)
{
*(ptr++) = str[--n]; // error2: wrong use of n variable,decrementing n will effect the loop..
}
*ptr = '\0';
printf(" rev %s",ptr2);
}
你可能需要这个......
int funrev( char * str)
{
int n = strlen(str);
char *ptr2 = (char*)malloc( n +1);
char* ptr = ptr2;
if(!(*str)) // error handling
{
printf("null string: nothing to reverse!\n");
return -1;
}
int i,lastindex = n; //edit...
for(i =0; i <=n ; i++)
{
*(ptr+i) = str[lastindex--]; //edit...
}
*(ptr+i+1) = '\0'; //edit...
printf(" rev %s",ptr2);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。