函数strlen()的返回值?

时间:2018-08-24 16:36:44

标签: c++ string-length

这是我惊呆了的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;
 }

相应地,它提供了合理正确的输出。(我不理解间隔的一部分)

enter image description here

现在我很想知道如果我这样做会打印什么:

 #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。

enter image description here

类似地我尝试过:

#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;
}

enter image description here

在我看来,在这里输出应该只包含“ 7-1 = 6”乘以反向字符串,但输出几乎相同。-1对“ len”的值没有影响。

有了这一切,我觉得strlen函数也必须计算空字符,即strlen (a)= 8(包括‘\0’),但是随后我只看到7个输出在输出窗口中。 这让我想知道strlen函数是否也对空字符进行计数,如果确实如此,则必须在输出窗口中将其显示为空格。我无法理解完整的概念,需要任何帮助吗? 我是编程新手,请放轻松。谢谢 :)。

2 个答案:

答案 0 :(得分:3)

如果您的字符串包含7个字符,则可打印字符的数组索引从0到6,并且strlen()将返回7a[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++)