我需要有关此考试的帮助。我需要反转输入字符串。
int main(void)
{
char str[30];
int strlen; int i=0; int count=0;int temp;int j;
printf("Enter the string \n");
gets(str);
while(str[i]!='\0')
{
i++;
count++;
}
strlen=count;
printf("The length of the string:%d\n", strlen);
i=0;
j=strlen;
while(i<j)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
i++;
j--;
}
printf("Reverse string :%s",str);
return 0;
}
问题在于,最后它没有显示字符串。 它告诉我:
"Reverse string :"
,即没有反向字符串。我的错误在哪里?
答案 0 :(得分:1)
您正在执行的代码中
j=strlen;
j指向字符串的最后一个索引,即'\ 0'
然后在循环中设置str[i]=str[j];
因此,第一个索引将是\0
打印str不会显示任何内容
为了使代码正确设置j=strlen - 1;
答案 1 :(得分:0)
尝试一下:-
由于在您的代码中,您正在分配指向j=strlen
或\0
字符的null
,将其更改为j=strlen-1;
char str[30];
int strlen;int i=0;int count=0;int temp;int j;
printf("Enter the string \n");
gets(str);
while(str[i]!='\0')
{
i++;
count++;
}
strlen=count;
printf("The lenht of the string:%d\n",strlen);
i=0;
j=strlen-1;
while(i<j)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
i++;
j--;
}
printf("Reverse string :%s",str);
答案 2 :(得分:0)
问题出在j=strlen;'.
People will suggest you to change it to
j = strlen-1;`
但是,我建议从根本上解决。
while(str[i]!='\0')
{
i++;
count++;
}
此循环后,count
将保留值作为具有'\ 0'字符串的索引。在这里,您应该递减count
,然后将其分配给strlen
。这使代码更易于理解。
进行此更改后,您还必须更改
printf("The length of the string: %d\n", strlen);
到
printf("The length of the string: %d\n", strlen+1);
它会打印
The length of the string: 4
由于递减,而不是5
的{{1}}。
此外,一旦在代码中包含"Hello"
头文件,strlen
就是一个函数。为了使它易于移植,您应该始终使用命名约定,该约定不会在代码中将标准的通用函数名称(例如string.h
)用作变量名。
比您现有的代码稍好一点的版本(仅使用您的逻辑)将少使用一个变量,并且看起来像这样:
strlen