如何用字符串程序设计示例

要求不使用字符串处理函数,计算字符串的长度,即统计字符数组中第一个'\0'前面的字符个数。并输出该字符数

C:\Program Files (x86)\Microsoft SDK\src\crt\strlen.c

/***
*strlen.c - contains strlen() routine
*
*       Copyright (c) 1985-2001, Microsoft Corporation. All rights reserved.
*
*Purpose:
*       strlen returns the length of a null-terminated string,
*       not including the null byte itself.
*
*******************************************************************************/

#include <cruntime.h>
#include <string.h>

#ifdef _MSC_VER
#pragma function(strlen)
#endif  /* _MSC_VER */

/***
*strlen - return the length of a null-terminated string
*
*Purpose:
*       Finds the length in bytes of the given string, not including
*       the final null character.
*
*Entry:
*       const char * str - string whose length is to be computed
*
*Exit:
*       length of the string "str", exclusive of the final null byte
*
*Exceptions:
*
*******************************************************************************/

size_t __cdecl strlen (
        const char * str
        )
{
        const char *eos = str;

        while( *eos++ ) ;

        return( (int)(eos - str - 1) );
}



不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7630578
  • 这篇博客也不错, 你可以看下华为在线笔试题 接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
  • 除此之外, 这篇博客: 预处理命令总合集。最实用的从代码中解析,超容易理解,这样你还看不懂?中的 首先看下列表格预处理归纳: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    指令描述
    #include它是C语言中的头文件命令,用于指定头文件嵌入源文件中。
    #define宏定义。
    #undef宏定义的终止符,用于取消已定义的宏。
    #ifdef如果宏已定义则返回真。
    #ifndf如果宏没有定义则返回真。
    #if如果条件语句成立,则编译运行下面的代码。
    #else与#if一起使用,如果#if条件不成立,则执行下面的代码。
    #elif与#if一起使用,如果#if条件不成立,当前条件成立,则执行下面的代码。
    #endif结束一个 #if……#else 条件编译块。
    #error当遇到标准错误时,输出错误消息。
    #pragma

    使用标准化方法,向编译器发布特殊的命令到编译器中。 

  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 操作最后一个元素复杂度震荡问题的解决小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    针对该问题,可以借鉴可变参数列表的函数的实现方式,利用参数列表最左侧的参数来确定字符数组的长度,然后通过一个for循环依次遍历数组并计数,最终得到字符数组的长度。具体实现步骤如下:

    #include <stdio.h>
    #include <stdarg.h>
    
    int getLength(char* str, ...)
    {
        int length = 0;      // 初始化长度为0
        va_list arg;         // 定义可变参数列表变量
        va_start(arg, str);  // 初始化可变参数列表
    
        int n = va_arg(arg, int); // 取出参数列表中的第一个参数 - 字符数组的长度
        for (int i = 0; i < n; ++i) {
            if (str[i] == '\0') {
                break; // 字符数组已经遍历完,跳出循环
            }
            length++; // 统计字符数组的长度
        }
        va_end(arg); // 结束可变参数列表的使用
        return length;
    }
    
    int main()
    {
        char str[] = "hello, world!"; // 字符数组
        int len = getLength(str, sizeof(str)); // 调用函数获取字符数组的长度
        printf("Length of string is: %d\n", len); // 输出字符数组的长度
    
        return 0;
    }
    

    该程序的输出结果为:Length of string is: 13,表示字符数组的长度为13个字符。其中,getLength()函数中的va_list、va_start和va_arg等函数和可变参数列表的函数实现方式类似。主函数中调用getLength()函数时,第一个参数为字符数组的首地址,第二个参数为字符数组的长度,从而通过循环遍历字符数组并计数,最终返回字符数组的长度。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^