[英]why is my 'reverse' string C function not working?
我正在嘗試編寫一個函數來反轉C語言字符串中的字符,但是它不起作用。
這就是我所擁有的:
/* ... the */
char str[1000];
strcpy(&str[0], &text[0]); // get the values from existing 'char text[1000]'
if (DEBUG) printf("DEBUG: str value before reverse: %s\n", str);
// reverse the string
reverse(&str[0]);
if (DEBUG) printf("DEBUG: str value after reverse: %s\n", str);
/* ... */
調用“ reverse”后,我的輸出如下所示:
DEBUG: str value before reverse: this is a line of text
DEBUG: str value after reverse:
這是我的功能:
void reverse(char * str)
{
char str2[1000];
int i = 0;
// find the null in str
while (str[i] != '\0') {
i++;
}
// now put the chars from str into str2 in the reverse order
int j = 0;
while (i >= 0) {
str2[j] = str[i];
i--;
j++;
}
str2[j] = '\0';
// now str2 contains the reverse of str, copy it to str
strcpy(&str[0], &str2[0]);
return;
}
它出什么問題了? 還有更簡單的方法來反轉字符串嗎?
它出什么問題了?
在第一個循環完成之后, str[i]
等於0。因此,第二個循環的第一次迭代將空終止符存儲在str2
的第一個位置,從而使其有效地成為長度為0的字符串。將其他字符寫入緩沖區,但是您使用的任何函數都會忽略這些字符。
還有更簡單的方法來反轉字符串嗎?
當然。 例如, 此實現在不分配其他緩沖區的情況下就地反轉字符串:
char *strrev(char *str)
{
char *p1, *p2;
if (! str || ! *str)
return str;
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
return str;
}
當str [i]為'\\ 0'時,您開始復制,因此您的字符串將以它開頭並且為空。
我想到了。
在第一個while循環之后,i是'\\ 0'的位置,並且使它成為str2的第一個字符,因此str始終為空字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.