这是我惊呆了的strlen的定义。
strlen()函数计算给定字符串中的字符数并返回整数值。找到空字符后,它将停止对字符计数。
现在,根据我的说法,“ kshitij”的strlen应该为= 7,即不包括空字符,因为该函数在遇到空字符时会停止计数。 因此,如果我要打印单词“ kshitij”及其反义字的次数与单词中字母的次数相同,那么正确的代码应该是正确的。
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char a[1000];
gets(a);
int len=strlen(a);
for(int i=0; i<= len ; i++)
{
for(int j=len ; j>=0; j--)
{
cout<<a[j];
}
cout<<" ";
}
getch();
return 0;
}
相应地,它提供了合理正确的输出。(我不理解间隔的一部分)
现在我很想知道如果我这样做会打印什么:
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char a[1000];
gets(a);
int len=strlen(a);
for(int i=0; i<= len ; i++)
{
for(int j=len -1 ; j>=0; j--)
{
cout<<a[j];
}
cout<<" ";
}
getch();
return 0;
}
根据我的看法,该词不应该产生最后一个字母“ j”,但我看到的是它产生相同的输出,但间距比以前少1。
类似地我尝试过:
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char a[1000];
gets(a);
int len=strlen(a);
for(int i=0; i<= len - 1 ; i++)
{
for(int j=len ; j>=0; j--)
{
cout<<a[j];
}
cout<<" ";
}
getch();
return 0;
}
在我看来,在这里输出应该只包含“ 7-1 = 6”乘以反向字符串,但输出几乎相同。-1对“ len”的值没有影响。
有了这一切,我觉得strlen
函数也必须计算空字符,即strlen (a)= 8
(包括‘\0’
),但是随后我只看到7个输出在输出窗口中。
这让我想知道strlen函数是否也对空字符进行计数,如果确实如此,则必须在输出窗口中将其显示为空格。我无法理解完整的概念,需要任何帮助吗?
我是编程新手,请放轻松。谢谢 :)。
答案 0 :(得分:3)
如果您的字符串包含7个字符,则可打印字符的数组索引从0到6,并且strlen()
将返回7
。 a[7]
包含空终止符。
因此,如果您从j = len
开始循环,则它打印的第一个字符是空字符,然后它将在其余迭代中打印可打印的字符。如果从len-1
开始循环,它将仅打印可打印的字符。
您看到的额外间距是空字符。在某些操作系统上,打印空字符不会产生可见效果,但是在您的系统上,显然可以打印空格。
答案 1 :(得分:1)
此
for(int i=0; i<= len ; i++)
带有len == 7
的将循环为0、1、2、3、4、5、6、7;
因为只要条件i<= len
为真,执行就会发生。
当条件不再成立时,它将停止执行,该条件在i==8
之前不适用。
对于i==8
,将不会执行任何操作,但会执行1到7,执行0,即执行8次。
使用len执行循环的惯用法是
for(int i=0; i< len ; i++)