• 字符串


    1、下面程序的输出结果为多少?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void Func(char str_arg[100])
    {
        printf("%d ", sizeof(str_arg));
    }
    int main(void)
    {
        char str[] = "Hello";
        printf("%d ", sizeof(str));
        printf("%d ", strlen(str));
        char *p = str;
        printf("%d ", sizeof(p));
        Func(str);
    }
    答:6 5 4 4
     
    sizeof和strlen()都可以用来统计字符串所占用的大小,二者的区别为:
    1. sizeof是运算符,而strlen是函数;
    2. strlen必须以char *作为参数,且必须以''结尾;而sizeof()可以用于其他类型;
    3. strlen统计字符串中字符的长度,不包括结尾的'';
    4. 数组做sizeof的参数不退化,而传递给strlen就变为指针
    sizeof(str):占用的字节为5 + 1 = 6,其中1为末尾的'';
    strlen(str):5
    sizeof(p):计算的是指针的长度,32位机器上为4B
    Func(str):传递的是指针,大小为4
    2、

    下面程序的输出结果为多少?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Func(char str_arg[2])
    {
     int m = sizeof(str_arg); //指针的大小为4
     int n = strlen(str_arg); //对数组求长度,str_arg 后面的那个2没有任何意义,数组已经退化为指针了
     printf("%d ",m);
     printf("%d ",n);
    }
    int main(void)
    {
     char str[]="Hello";
     Func(str);
    }
     

    答:4 5

    3、给定一个字符串,求出其最长的重复子串。

    答:
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
     
    //给定一个字符串,求出其最长的重复子串
    //方法一
    string lsubstr_1(const string & str)
    {
        vector<string> vs;
        for (int i = 0; i < str.size(); i++)
            vs.push_back(str.substr(i));
        sort(vs.begin(), vs.end());
        int max = 0;
        int flag = 0;
        for (int i = 0; i <( vs.size()-1); i++)
        {
            int j = 0;
            while (vs[i][j] == vs[i + 1][j] && j<vs[i].size() && j<vs[i+1].size())
                j++;
            if (j>max)
            {
                max = j;
                flag = i;
            }          
        }
        return vs[flag].substr(0, max);
    }
     
    //方法二
    string lsubstr_2(const string & str)
    {
        string maxstr;
        for (int i = 0; i < str.size();i++)
        for (int j = (str.size() - i); j >=1 ; j--)
        {
            string subs = str.substr(i, j);
            int front = str.find(subs);
            int back = str.rfind(subs);
            if (front != back && subs.size() > maxstr.size())
                maxstr = subs;
        }
        return maxstr;
    }
     
    //方法三
    string lsubstr_3(const string & str)
    {
        string maxstr;
        for (int i = 0; i < str.size(); i++)
            for (int j = 0; j < i; j++)
            {
                string temp;
                int k = j;
                int m = i;
                while (str[m] == str[k] && i<str.size() && k<str.size())
                {
                    m++; k++;
                }
                temp = str.substr(j, k - j);
                if (temp.size()>maxstr.size())
                    maxstr = temp;
            }
        return maxstr;
    }
     
    void main(void)
    {
        string test;
        //cin >> test;
        getline(cin, test);
        cout << lsubstr_1(test) << endl;
        cout << lsubstr_2(test) << endl;
        cout << lsubstr_3(test) << endl;
    }
    4、
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char*getmemory(void)
    {
        char p[]=”hello world”;
        return p;
    }
    void test(void)
    {
        char *str=NULL;
        str=getmemory(); printf(str);
    }

    请问运行Test 函数会有什么样的结果?答:乱码

    如果要输出”hello world”,则需修改为

     char *p=”hello world”;
        return p;
    5、
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include<stdio.h>
    int main()
    {
        unsigned char i=7;
        int j=0;
        for(;i>0;i-=3)
        {
           ++j;
         }
         printf("%d ",j);
         return 0;
    }
    请问该程序的输出是多少?173
  • 相关阅读:
    【Todo】Java线程面试题 Top 50 (转载)
    【Todo】秒杀系统 & 乐观锁 & Nginx反向代理
    【Todo】C++和Java里面的浮点数及各种数字表示
    asp.net操作word的表格
    Android消息推送(二)--基于MQTT协议实现的推送功能
    单点更新线段树 RMQ
    英语月结
    AppWidget应用(二)---PendingIntent 之 getActivity
    2 WAN 和1 Evo/3g Routeros PCC 方法负载平衡
    Android 网络权限配置
  • 原文地址:https://www.cnblogs.com/serser/p/6514214.html
Copyright © 2020-2023  润新知