在C中查找字符串的长度(不使用strlen)

时间:2012-01-12 07:07:41

标签: c

以下代码不会打印任何内容 -

int main() {

        char *input = "This is a string";
        find_length(input);
        return 0;

}
void find_length(char *input){

    printf("%s", input);
    int length = 0;
    while(input[length]!='\0');
    {
        length++;
        printf("%i", length);
    }

}

12 个答案:

答案 0 :(得分:19)

你的循环背后有一个额外的分号:

while(input[length]!='\0');
                          ^ does not belong here!!!

所以它陷入无限循环。摆脱它。


此外,可能会有流缓冲。尝试添加一些\n。或者调用fflush(stdout)来刷新输出流。

void find_length(char *input){

    printf("%s\n", input);
    int length = 0;
    while(input[length]!='\0')  //  remove ;
    {
        length++;
        printf("%i\n", length);
    }

}

答案 1 :(得分:3)

是的确如此,但由于它没有打印换行符,因此在程序退出之前缓冲区不会被刷新,并且最终会在同一行上显示shell提示符。有些人有回车的shell提示,这会覆盖程序输出。

改变这个:

printf("...", ...);

对此:

printf("...\n", ...);

答案 2 :(得分:1)

以下是解决方案。

#include <stdio.h>

int main()
{
 char str[100];
 printf("Enter a string: ");
 printf( "\rLength is: %d", printf("Entered string is: %s\n", gets(str)) - 20);
 return 0;
}

在上面的程序中,gets()返回输入的字符串。我们使用第一个printf打印长度。第二个printf()调用gets()并使用gets()的返回值打印输入的字符串,它还打印20个额外的字符用于打印“Entered string is:”和“\ n”。这就是为什么我们从第二个printf的返回值中减去20并得到长度。

答案 3 :(得分:0)

增加length变量或删除分号到while循环。

尝试,

void find_length(char *input){
    int length = 0; /* declaration */

    printf("%s", input);
    while(input[length++]!='\0');
    printf("%i", length);
 }
 /* OR */
 void find_length(char *input){
    int length = 0;
    while(input[length]!='\0') 
    {
     length++;
     }
    printf("%i", length);
 }

答案 4 :(得分:0)

我猜其他帖子会指出正确的答案。

但我只想在这里留下一个注释。如果find_length()返回字符串的长度(size_t或它也可能是int)而不是void

,那就太好了

OTOH,您可以查看strlen()的各种其他实现。希望它有所帮助!

#include <stdio.h>

// array version
int strlen1(char a[])
{
        int len = 0;
        while (a[len])
                len++;
        return len;
}

// pointer version
// *p++ = dereference the pointer value and then
// increment the pointer to the next memory location
int strlen2(char *p)
{
        int len = 0;
        while (*p++)
                len++;
        return len;

        /*              
        int *q = p;
        while (*p);
                p++;
        return p-q;
        */
}

int main()
{
        char s[] = "test string";
        char *p = "another string";

        printf("strlen1(%s) = %d \n", s, strlen1(s));
        printf("strlen1(%s) = %d \n", p, strlen1(p));

        printf("strlen2(%s) = %d \n", s, strlen2(s));
        printf("strlen2(%s) = %d \n", p, strlen2(p));

        return 0;
}

答案 5 :(得分:0)

查找给定字符串长度的简便方法

int strLength(const char *_array)
  {
     int str_len=0;
        while(*(_array++))  
          str_len++;

        return str_len;
   }

答案 6 :(得分:0)

这是你的答案:(len将是字符串的长度,字符串是字符串!)

int len;
for(len=0; string[len]!='\0'; len++);
printf("Length of string is %i", len);

答案 7 :(得分:0)

这个问题很老但是......为什么你要创建一个循环来获取字符串的长度,因为printf已经可以通过说明符%n来做到这一点:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char *input = "This is a string";
    int length=0;
    printf("%s%n",input,&length);
    printf("\nThe length of \"%s\" is %d",input, length);
    return 0;
}

或者您甚至可以在打印字符串后得到printf函数的输出:

length=printf("%s",input);
printf("\nThe length of \"%s\" is %d",input, length);

答案 8 :(得分:0)

C++, Count string without functions

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string leng;
    cout << "Enter String for Count" << endl;
    cin >> leng;
    int a = 0;
    while (leng[a++]);
    {
    cout << a;
    }
}

答案 9 :(得分:0)

如果您使用for(int i=0; str[i];i++),则只要字符数组中的元素不是'\0',则此循环也将运行。您可以算到'\0为止。 在下面的代码中,您可以看到与while循环相同的内容,但是返回时应该执行-1,就像循环遇到'\0'时终止一样,但它还会添加1。如果这使您感到困惑,则可以对for(length=0; ch[length];length++);使用相同的逻辑,则不必执行-1;

                #include <stdio.h>

                int strlength(char ch[]){
                    int length =0;
                    while(ch[length++]);
                    return length-1;
                }


                int main(){

                    char ch[20];
                    scanf("%s", ch);
                    // printf("%s", ch);
                    printf("%i\n",strlength(ch));
                    return 0;
                }

答案 10 :(得分:0)

您可以使用 strlen 源代替 strlen Gnu C 编译器 - GLIBC

#include <string.h>

size_t strlen (const char *str)
{
  int cnt;

  asm("cld\n"           /* Search forward.  */
      /* Some old versions of gas need `repne' instead of `repnz'.  */
      "repnz\n"         /* Look for a zero byte.  */
      "scasb" /* %0, %1, %3 */ :
      "=c" (cnt) : "D" (str), "0" (-1), "a" (0));

  return -2 - cnt;
}

注意 asm 用于在 C 源代码中插入程序集(也可能是 __asm__

答案 11 :(得分:-2)

main(int argc, char *argv[])
{
    char *input = "Enter Any string";
    printf("your Entered String is: %s\n", input);

    int length = 0;
    while (input[length] != '\0') {
          length++;
    }

    printf("length is : %i\n", length); 
}