我用C写的这个字符串反转器有什么问题?
我看到过类似的事情(变量的变化),但这一次没有,你们能告诉我为什么吗? 代码如下:我用C写的这个字符串反转器有什么问题?,c,arrays,string,reverse,C,Arrays,String,Reverse,我看到过类似的事情(变量的变化),但这一次没有,你们能告诉我为什么吗? 代码如下: #include <stdio.h> #include <string.h> int main(){ int i,j,k; char str[255],rvrs[255]; printf("Insert your string: "); gets(str); i=strlen(str); k=i; for(j=0;j<=
#include <stdio.h>
#include <string.h>
int main(){
int i,j,k;
char str[255],rvrs[255];
printf("Insert your string: ");
gets(str);
i=strlen(str);
k=i;
for(j=0;j<=i;j++,k--){
rvrs[k]=str[j];
}
printf("%s",rvrs);
}
#包括
#包括
int main(){
int i,j,k;
字符str[255],rvrs[255];
printf(“插入字符串:”);
获取(str);
i=strlen(str);
k=i;
for(j=0;j在循环的最后一次迭代中,j
等于i
str[i]
是空字符(str[0]
到str[i-1]
是字符串中的i
非空字符)
设置为空字符。此时,k
为零。因此,rvrs
包含一个空字符串(其中空字符是第一个字符的字符串,因此字符串结尾没有非空字符)
要解决此问题,您需要修改代码:
- 首先,将
设置为零,这样它将在您想要的位置终止rvrs[i]
- 其次,修改循环以正确地将元素从
反转为0
,而不是从i-1
反转为0
。执行此操作时,请注意确保i
具有正确的值k
j对于符合C标准的起动器,不带参数的功能main
应声明如下
int main( void )
函数gets
不安全,C标准不再支持该函数。例如,使用标准函数fgets
当j
等于i
而该值又等于strlen(str)
时,str[j]
等于'\0'。即终止零写入数组的开头rvrs
rvrs[k]=str[j];
这没有道理
考虑到函数strlen
具有返回类型size\u t
notint
程序可以按以下方式运行
#include <stdio.h>
#include <string.h>
#define N 255
int main(void)
{
char str[N], rvrs[N];
str[0] = '\0';
printf("Insert your string: ");
fgets( str, sizeof( str ), stdin );
size_t n = strcspn( str, "\n" );
for ( size_t j = 0; j != n; j++ )
{
rvrs[j] = str[n - j - 1];
}
rvrs[n] = '\0';
puts( rvrs );
return 0;
}
首先,请告诉我们什么“不起作用”很多人会抱怨你把C和C++都贴上标签,尽管它们是分开的语言。我想问:你为什么这么做?你认为它们是一种语言吗?你认为C++中的任何东西都应该是自动的C,还是反之亦然?你想要一个答案吗?对于两个或两个答案,每个答案一个?可能类似于Java和Javascript。后者类似于前者,但脚本:/Functiongets
已过时。数组索引。k=i;for(J=0;谢谢你的帮助。我对这些毫无意义。我只标注了C++,因为我需要五个标签,我不知道还有什么要做的。put@DavidMachado:五个标签是上限,不是要求。然后我误解了。这太尴尬了sorry@DavidMachado:没什么大不了的。
Insert your string: Hello David Machado
odahcaM divaD olleH