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);} |
sizeof和strlen()都可以用来统计字符串所占用的大小,二者的区别为:
- sizeof是运算符,而strlen是函数;
- strlen必须以char *作为参数,且必须以' '结尾;而sizeof()可以用于其他类型;
- strlen统计字符串中字符的长度,不包括结尾的' ';
- 数组做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