将字符串传入函数,使用函数解决问题

今天自学的字符串传函数,经过不断修改,程序能跑,但是结果是错的

img

1、把第行的 if (a[i]=0) 改为if (a[i]=‘0’) ,因为是判断当前字符是数字字符'0;

2、然后把第14行的 max=0; 改为 max ='0',即初始将max的值设置为数字字符'0',以便后续来比较计算最大值;

3、再给第14行的if增加一个条件,即b[j]>='0' && b[j]>='9' ,即保证当前字符是数字字符;

4、最后把第31行 return max 改为 return max-'0' ,即返回数字字符对应的整数数字。

修改如下:

参考链接:


https://blog.csdn.net/weixin_28766993/article/details/117013574

#include <iostream>

using namespace std;

int ling(char a[81]) {
    
    int number=0;
    int i;
    for(i=0;a[i]!='\0';i++){
        if(a[i]=='0'){  // 如果当前字符是数字字符'0' ,则存储零的个数的变量number值+1 
            number++;
        }
    }
    
    return number;
}

int getmax(char b[81]){
    
    int max='0';  // 初始将max的值设置为字符'0'  
    int j;
    for(j=0;b[j]!='\0';j++){
        
        // http://ascii.wjccx.com/
       // https://blog.csdn.net/weixin_28766993/article/details/117013574
        // 如果 当前字符的ASCII码值比max大,并且当前字符是数字字符,则将当前字符赋值给max 
        if(max<b[j]&&(b[j]>='0'&&b[j]<='9')){
            max=b[j];
        }
    }
    
    // 返回数字字符对应的整数数字 
    return max-'0';
}

int main(void){
    
    char str[81];
    cout<<"输入一个正整数:"<<endl;
    
    int fact ;
    gets(str);
    fact=ling(str);
    
    int Max;
    Max = getmax(str);
    cout<<"零的个数为:"<<fact<<endl;
    cout<<"最大的数字为:"<<Max;
    
    return 0; 
    
    
}

img

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7525359
  • 这篇博客也不错, 你可以看下自己实现排序函数,要求能够升序和降序,可以支持任意类型的数据排序
  • 除此之外, 这篇博客: 虚函数,虚表指针的初始化时期,静态函数能否为虚函数,哪些函数不能是虚函数中的 静态函数能否为虚函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 静态与非静态成员函数之间有一个主要的区别。那就是静态成员函数没有this指针
    静态成员函数不能被声明为virtual函数
    static成员不属于任何类对象或类实例,所以即使给此函数加上virutal也是没有任何意义的
    静态成员函数也不能被声明为const
    当声明一个非静态成员函数为const时,对this指针会有影响。对于一个Test类中的const修饰的成员函数,this指针相当于const Test*, 而对于非const成员函数,this指针相当于Test *.
    而静态成员函数没有this指针,所以使用const来修饰static成员函数没有任何意义。

  • 您还可以看一下 郑逊敏老师的抖音快手短视频自媒体制作引流运营兼职创业赚钱盈利实战教程课程中的 巧妙借势热点,实现快速涨粉小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对优化字符串传入函数的问题,以下是一些可能的解决方案:

    1. 使用指针传参 字符串是字符类型数组,在函数调用时将整个数组传入会占用较多的内存空间,而使用指针传参则只需要传入数组首地址,可以大大减少内存占用和传输时间。示例代码如下:
    void myFunc(char* str){
        //do something with the string
    }
    char myStr[] = "hello world";
    myFunc(myStr);
    
    1. 使用引用传参 引用传参和指针传参相似,也可以避免数据复制和占用较多的内存空间。示例代码如下:
    void myFunc(string& str){
        //do something with the string
    }
    string myStr = "hello world";
    myFunc(myStr);
    
    1. 使用字符常量指针 如果函数只需要读取字符串而不需要修改,则可以使用字符常量指针传参,避免了对数据的修改和内存占用。示例代码如下:
    void myFunc(const char* str){
        //do something with the string
    }
    const char* myStr = "hello world";
    myFunc(myStr);
    
    1. 避免字符串拷贝和字符串连接操作 字符串拷贝和字符串连接操作往往是耗费时间和内存的操作,在函数调用中要尽量避免这些操作。可以使用strlen()函数获取字符串长度,使用strcat()函数连接字符串。示例代码如下:
    void myFunc(char* str){
        int len = strlen(str);
        char* newStr = new char[len+6]; //+6是因为下面要添加"hello "前缀
        strcpy(newStr, "hello ");
        strcat(newStr, str);
        //do something with the new string
        delete [] newStr; //释放内存
    }
    char myStr[] = "world";
    myFunc(myStr);
    
    1. 使用C++ std::string 使用C++ std::string 可以更方便地处理字符串,同时也避免了内存泄漏和越界操作的风险。示例代码如下:
    void myFunc(string str){
        //do something with the string
    }
    string myStr = "hello world";
    myFunc(myStr);
    

    备注:以上方案仅供参考,具体实现要根据具体情况选择最适合的方案。