我写了一小段代码来反转字符串。
#include "template.h"
void main() {
char temp;
char *str = NULL;
int read, i;
size_t len = 20;
read = getline(&str, &len, stdin);
if (read > -1)
{
str[strlen(str) - 1] = '\0';
for (i = 0; i < strlen(str)/2; i++)
{
temp = str[i];
str[i] = str[strlen(str) - i];
str[strlen(str) - i] = temp;
}
printf("%s\n", str);
}
else
printf("FOFF!\n");
}
当我输入abcdef
时,输出为afedcb
。为什么第一个字符没有移到最后?
答案 0 :(得分:2)
您的代码中存在错误
str[i] = str[strlen(str) - i]; // should be str[i] = str[strlen(str) - i -1];
并且
str[strlen(str) - i] = temp ; // should be str[strlen(str) - i - 1] = temp;
否则当i == 0时,str [strlen(str) - 0]为\0
;
这是完全有效的代码
#include "stdio.h"
#include "string.h"
int main()
{
char temp;
char *str = NULL;
int read, i;
size_t len = 20;
read = getline(&str, &len, stdin);
if (read > -1)
{
str[read - 1] = '\0';
for (i = 0; i < strlen(str)/2; i++)
{
temp = str[i];
str[i] = str[read - 1 - i - 1];
str[strlen(str) - i - 1] = temp;
}
printf("%s\n", str);
}
else
printf("FOFF!\n");
}
答案 1 :(得分:0)
这是我的反向字符串代码。
void reverse(char str[],int len)
{
char c;
int i;
int n=(len-1)/2;
for(i=0;i<=n;i++)
{
c=str[len-i-1];
str[len-i-1]=str[i];
str[i]=c;
}
}