利用指针求字符串指针赋值长度,其中p-s的含义,求解释

[code]求字符串中最大子串的长度
题目:输入一个字符串,要求找出字符串中最大子串的长度(如字符串abcd13agbf,当重复出现某个字符时,算一个子串,比如abcd13a或bcd13agb都是子串)。
理解:要是每个字符都不一样,则最大子串长度为0。
方案一:这个方法比较好
思想:用空间换取时间,用一个数组lastPos[256]代表着256个可能的字符(ASC2码),而数组的值代表字符串中这个字符的最后出现位置,初始数组元素都为负数,然后每次取字符串中的一个字符,此字符的ASC2码为c,若lastPos[c]&0,则表示此字符第一次出现,置lastPos[c]为此字符在字符串中的位置,若lastPos[c]&=0,则表示此字符已经出现过,则可以计算这个子串的长度,若比之前的最大子串长,则更新最大子串长度。
分析:时间复杂度为o(n)
int GetMaxSubStr(const unsigned
char *str)
& & int maxLen = 0;
//初始化最大子串长度
& & if (NULL == str) //入参判断
& return 0;
& & int lastPos[256];
//代表着256个可能的字符(ASC2码),数组元素值代表字符串中字符的最后出现的位置
&&& for (int i =
0; i & 256; ++i)
& lastPos[i] = -1;
& & for (int pos = 0; str[pos] !=
'\0'; ++pos)
& unsigned char c = str[pos];
//c的数值为这个字符的ASC2码
& if (lastPos[c] & -1)
//此字符已经出现过
& & & int len =
pos - lastPos[c] + 1; //计算子串的长度
&&&&&&&&&&&
if (len & maxLen) //与先前最大子串长度进行比较
&&&&&&&&&&&
& & maxLen =
& lastPos[c] =
& & return maxL
思路:用两个指针,前一个从前向后移,后一个从后向前移,参见伪码
分析:子串长度越大,性能越好,若为n,时间复杂度为o(1),若为0,时间复杂度为o(n平方).
伪码:自己写的,不知对不
int GetMaxSubStr(const unsigned char *str)
字符串长度;
&&&max_length =
0;&& //最大子串长度
&&&p_begin&&
//子串开始字符,从第一个字符开始向后
&&&p_end&&
//子串结束字符,从最后一个字符开始向前
&&&now_length =
p_end - p_begin + 1;&&
//当前可能的最大子串长度
&&&&&while(now_length
& max_length)
&&&&&&&//子串查找工作
&&&&&&&while(未找到子串且
p_begin & p_end){p_end后移};
&&&&&&&if(找到)
&&&&&&&&&if
(新子串长度 & 原最大子串长度)
&&&&&&&&&{
&&&&&&&&&&
&&&&&&&&&}
&&&&return
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。9.设有下面的程序段:则下列叙述正确的是( ).char s[]="china"; char * p=s;A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等C) *p与s[0]相等 D) s数组长度和p所指向的字符串长度相等答案_作业帮
9.设有下面的程序段:则下列叙述正确的是( ).char s[]="china"; char * p=s;A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等C) *p与s[0]相等 D) s数组长度和p所指向的字符串长度相等答案
9.设有下面的程序段:则下列叙述正确的是( ).char s[]="china"; char * p=s;A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等C) *p与s[0]相等 D) s数组长度和p所指向的字符串长度相等答案为什么选C不选D?
(A) s和p完全相同a的类型是cha数组p的类型是char指针 不一样(B)数组s中的内容和指针变量p中的内容想等数组s中的内容是:"china"指针变量p中的内容是:s[0]的地址(&s[0])一个是字符串 一个是地址 不一样(D)s数组长度和p所指向的字符串长度相等s数组长度包括 '\0'的位置p所指向的字符串长度不包括 '\0'的位置s数组长度 == p所指向的字符串长度 + 1 (1就是'\0'占有的位置) 显然 不相等
char s[]="china";是定义了一个大小为5的字符数组,并初始化为china,char*p;定义了一个指针,p=s;将指针P指向数组S的内存首地址,用*p和s输出的结果是一样的,但p和s还是有区别的,p本身申请的地址空间内存放的是s的首地址的内存空间,而S的连续内存空间内存放的是值china。...
s数组长度与p指向的字符串长度分别是多少?二级C语言――填空_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
二级C语言――填空
高​考​历​史​、​文​综​历​史​专​题​复​习​【​全​部​完​成​】
大小:18.27KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢要求用指针方法:写一函数,求一个字符串的长度_百度知道
要求用指针方法:写一函数,求一个字符串的长度
在main函数中
#include&stdio.h&int longs(char *s){ int i=0,n=0; for(i=0;*(s+i)!='\0';i++)
n++; return(n-1);}void main(){ char *s; char c[100]; s=c; gets(c); num=longs(s); printf(&%d&,num);}
其他类似问题
为您推荐:
函数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 字符串指针赋值 的文章

 

随机推荐