用如何成为c语言大神解析一个字符串,求大神帮助

页面导航:
→ 正文内容 C语言 const
解析C语言中如何正确使用const
本篇文章是对C语言中如何正确使用const,进行了详细的分析介绍。需要的朋友参考下
基本解释 const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。
问题: const变量 & 常量为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?const int n = 5;int a[n];
答案与分析: 1)、这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, “abc”,等,肯定是只读的,因为程序中根本没有地方存放它的值,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。2)、注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。3)、那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
问题: const变量 & const 限定的内容下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?typedef char * pSchar string[4] = "abc";const char *p1 =const pStr p2 =p1++;p2++;
答案与分析: 问题出在p2++上。1)、const使用的基本形式: 限定m不可变。2)、替换1式中的m, const char * 限定*pm不可变,当然pm是可变的,因此问题中p1++是对的。3)、替换1式char, const newT 限定m不可变,问题中的charptr就是一种新类型,因此问题中p2不可变,p2++是错误的。
问题: const变量 & 字符串常量请问下面的代码有什么问题?char *p = "i'm hungry!";p[0]= 'I';
答案与分析: 上面的代码可能会造成内存的非法写操作。分析如下, “i'm hungry”实质上是字符串常量,而常量往往被编译器放在只读的内存区,不可写。p初始指向这个只读的内存区,而p[0] = 'I'则企图去写这个地方,编译器当然不会答应。
问题: const变量 & 字符串常量2请问char a[3] = "abc" 合法吗?使用它有什么隐患?
答案与分析: 在标准C中这是合法的,但是它的生存环境非常狭小;它定义一个大小为3的数组,初始化为“abc”,,注意,它没有通常的字符串终止符 '/0',因此这个数组只是看起来像C语言中的字符串,实质上却不是,因此所有对字符串进行处理的函数,比如strcpy、printf等,都不能够被使用在这个假字符串上。
问题: const & 指针类型声明中const用来修饰一个常量,有如下两种写法,那么,请问,下面分别用const限定不可变的内容是什么?
1)、const在前面const int nValue; //nValue是constconst char *pC //*pContent是const, pContent可变const (char *) pC//pContent是const,*pContent可变char* const pC //pContent是const,*pContent可变const char* const pC //pContent和*pContent都是const
2)、const在后面,与上面的声明对等int const nValue; // nValue是constchar const * pC// *pContent是const, pContent可变(char *) const pC//pContent是const,*pContent可变char* const pC// pContent是const,*pContent可变char const* const pC// pContent和*pContent都是const
答案与分析: const和指针一起使用是C语言中一个很常见的困惑之处,在实际开发中,特别是在看别人代码的时候,常常会因为这样而不好判断作者的意图,下面讲一下我的判断原则:沿着*号划一条线,const和谁在一边,那么谁就是const,即const限定的元素就是它。你可以根据这个规则来看上面声明的实际意义,相信定会一目了然。另外,需要注意:对于const (char *) ; 因为char *是一个整体,相当于一个类型(如 char),因此,这是限定指针是const。
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910当前访客身份:游客 [
当前位置:
这是源代码
#include&stdio.h& #include&conio.h& int main()& { while(1) { key=getch();& if(key==27){ printf(&=====================================&); & & printf(&\n你按了Esc请在按一下任意键退出!\n&); & & printf(&=====================================&);} if(key&31 && key&127)/*如果不是特殊键*/ {printf(&按了 %c 键 ASCII值为:%d & 按 ESC退出!\n&,key,key);}&
key=getch(); & if(key==72) printf(&按了 上 键 & &按 ESC退出!\n&); if(key==80) printf(&按了 下 键 & &按 ESC退出!\n&); if(key==75) printf(&按了 左 键 & &按 ESC退出!\n&); if(key==77) printf(&按了 右 键 & &按 ESC退出!\n&);
}return 0; }
1.第一次输入“上键”是为何不会执行第二个if语句而是执行if(key==72)这条语句,不懂流程
2.为何H和上键不会混淆,我如果把上面代码if(key==72) printf(&按了 上 键 & &按 ESC退出!\n&);改成if(key==24) printf(&按了 上 键 & &按 ESC退出!\n&);运行程序是就出不来上键了,求解!!!!!!!!
共有1个答案
<span class="a_vote_num" id="a_vote_num_
我调试了以下发现输入“上”时 得到的是 &两个字符 & ascii码为 0和72 & 而不是一个字符所以你直接键入“上”时,就在缓冲区中填入了两个字符,而getch()函数是直接从缓冲区中取值的,只有当缓冲区中没有值时才会等待用户输入,所以第二个getch()没等你输入就直接获取了 ascii码为72的字符,至于没有执行第二个if是因为第一个字符的值为0。然后我查了一下方向键对应的值应该是
左是 0x4b00
右是 0x4d00
上是 0x4800
下是 0x5000&
所以这个程序的算法大概表述为
1.获取一个字符的ascii码,
& & & & & &如果值是27(esc)退出程序
& & & & & &如果值是介于31~127之间则输出字符与数值并且跳转到1;
2.获取一个字符的ascii码(说明如果进入到步骤2 则必然 第一个获取的字符为00,而第二个字符自动获取)
& & & & & & 根据值判断是按了上下左右那个键,然后跳转到1;
更多开发者职位上
有什么技术问题吗?求大神指针问题,如何返回字符串里出现的第一个空格的指针_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:343,182贴子:
求大神指针问题,如何返回字符串里出现的第一个空格的指针收藏
小弟最近在学C语言的指针部分,菜鸟级别的,现在遇到问题如下,求大神解决!1)写一个C语言方法,要求返回字符串里出现的第一个空格的指针。这是我写的程序,本来挺清楚的,后来越想越糊涂,写了两个方法来实现,一个是char *find_blank(char *start), 另一个是char *find_blank_1(char *start),现在这两个方法我不知道哪个对了。方法不能用数组!求大神看看,代码如下:#include &stdio.h&char *find_blank(char *start);char *find_blank_1(char *start);main(){char myStr[50] = &This is my array&;printf(&%d\n&, *find_blank(myStr));printf(&%d\n&, find_blank(myStr));printf(&%d\n&, *find_blank_1(myStr));printf(&%d\n&, find_blank_1(myStr));}char *find_blank(char *start){while (*start != &#39; &#39;){start++; //increase the pointer to point to the next charactor.}}char *find_blank_1(char *start){char *tempP while (*start != &#39; &#39;){start++; }//get the blank char and store it into tempchar temp = *//store the pointer of blank char to the temporary pointer, tempPrttempPrt = &//return the pointer of the first blank.return tempP}然后打印结果是:325765300325765283我觉得我写的两个方法是类似的,应该返回同样的地址,但却不一样。2)还有第二个问题:要求把字符串的前四个字符替换成* 要求方法不能用数组!我的代码如下:#include &stdio.h&void four_stars(char *start);main(){char myStr[50] = &This is my array&;four_stars(myStr);printf(&%c\n&, myStr);}void four_stars(char *start){int i = 0;char *for (i; i & 5; i++){*start = &#39;*&#39;;}}我的这个例子,应该打印出 ****
is my array(前四个字符是“This”,替换成****)但实际不是!
哦,第二题我自己解决了,原来少了start++; 在for loop里,并且把条件改成了for (i; i & 4; i++)
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或共有 971 人关注过本帖
标题:自定义函数实现字符串的连接功能(不调用strcat函数),要求用字符指针变量 ...
来 自:成都东软学院
等 级:新手上路
帖 子:60
结帖率:83.33%
&&已结贴√
&&问题点数:20&&回复次数:5&&&
自定义函数实现字符串的连接功能(不调用strcat函数),要求用字符指针变量作参数。OJ判断错误,大神帮忙看看
Description
自定义函数实现字符串的连接功能(不调用strcat函数),要求用字符指针变量作参数。
函数原型:void string_cat (char *source, char *target);将target指向的字符串连接到source指向的字符串后面。
字符串长度在500以内。
有多组测试数据,每组测试数据两行,一行是字符串ch1,第二行是字符串ch2。
对于每组测试数据输出拼接后的字符串。
Sample Input
Sample Output
注意:有多组测试数据,输出后换行。程序代码:#include&stdio.h&
#include&string.h&
void string_cat (char *source, char *target)
&&& char *point=
&&& while(*point)
&&&&&&&&point++;
&&& while(*target!='<font color=#')
&&&&&&&&*point=*
&&&&&&&&point++;
&&&&&&&&target++;
&&& *point='<font color=#';
int main()
&&& char s1[<font color=#00],s2[<font color=#00];
&&& for(;s1!='<font color=#';)
&&&&&&&&gets(s1);
&&&&&&&&gets(s2);
&&&&&&&&string_cat(s1,s2);
&&&&&&&&puts(s1);
&&& printf(&\n&);
&&& return <font color=#;
搜索更多相关主题的帖子:
等 级:蜘蛛侠
帖 子:567
专家分:1313
&&得分:20&
#include&stdio.h&
#include&string.h&
void string_cat (char *source, char *target)
&&& char *point=
&&& while(*point)
&&&&&&&&point++;
&&& while(*target!='\0')
&&&&&&&&*point=*
&&&&&&&&point++;
&&&&&&&&target++;
&&& *point='\0';
int main()
&&& int n,i;
&&& char s1[5][10000],s2[5][10000];
&&& printf(&几组字符串(两两一组,5组以内):&);
&&& scanf(&%d%*c&,&n);
&&& printf(&input:\n&);
&&& for(i=0;i&n;i++)
&&&&&&&&gets(s1[i]);
&&&&&&&&gets(s2[i]);
&&&&&&&&string_cat(s1[i],s2[i]);
&&& printf(&output:\n&);
&&& for(i=0;i&n;i++)
&&& printf(&%s\n&,s1[i]);
&&& return 0;
附件: 只有本站会员才能下载或查看附件,请
小小战士,战士中的战斗机!
来 自:成都东软学院
等 级:新手上路
帖 子:60
程序代码:#include&stdio.h&
#include&string.h&
void string_cat (char *source, char *target)
&&& char *point=
&&& while(*point)
&&&&&&&&point++;
&&& while(*target!='<font color=#')
&&&&&&&&*point=*
&&&&&&&&point++;
&&&&&&&&target++;
&&& *point='<font color=#';
int main()
&&& char s1[<font color=#0],s2[<font color=#0];
&&& while(s1!='<font color=#')
&&&&&&&&gets(s1);
&&&&&&&&gets(s2);
&&&&&&&&string_cat(s1,s2);
&&&&&&&&puts(s1);
&&& return <font color=#;
}我的代码,OJ判断Output Limit Exceed??
[ 本帖最后由 zhao 于
19:51 编辑 ]
等 级:蜘蛛侠
帖 子:567
专家分:1313
怎么会超时呢?我运行得好好的,只是你的程序不符合题意,而且退不出循环
小小战士,战士中的战斗机!
来 自:成都东软学院
等 级:新手上路
帖 子:60
回复 4楼 小小战士
跟题意一样啊
附件: 只有本站会员才能下载或查看附件,请
等 级:蜘蛛侠
帖 子:567
专家分:1313
有多组测试数据,每组测试数据两行,一行是字符串ch1,第二行是字符串ch2。
对于每组测试数据输出拼接后的字符串。
Sample Input//输入
Sample Output//输出
一样吗?题目是有多组数据时,一次性输入,一次性输出,你这是每输入一组输出一次,一样吗?
小小战士,战士中的战斗机!
版权所有,并保留所有权利。
Powered by , Processed in 0.026153 second(s), 9 queries.
Copyright&, BCCN.NET, All Rights Reserved@C语言大神:这题用指针数组输入10个字符串,并排序,为何执行不出来?求解释!_百度知道
@C语言大神:这题用指针数组输入10个字符串,并排序,为何执行不出来?求解释!
# include&stdio.h& int main(){ (char*)zfc[10]; char sort((char*)zfc[10]); for(i=0;i&10;i++)
gets(zfc);&#47;&#47;输入字符串
sort(zfc); for(i=0;i&10;i++)
printf(&%s&#92;n&,zfc[i]);} char sort(char (*zfc)[10]){ char *t; int i=0,j=0,k; for(i=0;i&10;i++) {
for(j=i;j&10;j++)
if(zfc[j]&zfc[i])
k=j;&#47;&#47;用排序法处理字符串
t=zfc[i];zfc[i]=zfc[k];zfc[k]=t;
提问者采纳
#&include&stdio.h&&#include&string.h&int&main(){&char&zfc[10][10];&int&i;&void&sort(char&(*zfc)[10]);&for(i=0;i&10;i++)&&gets(zfc[i]);//输入字符串&&sort(zfc);&for(i=0;i&10;i++)&&printf(&%s\n&,zfc[i]);&return&0;}void&sort(char&(*zfc)[10]){&char&t[10];&int&i=0,j=0,k;&for(i=0;i&10;i++)&{&&k=i;&&for(j=i;j&10;j++)&&&{&&&if(strcmp(zfc[j],zfc[i])&0)&&&&&k=j;//用排序法处理字符串&&&&if(k!=i)&&&&{&&&&&strcpy(t,zfc[i]);&&&&&strcpy(zfc[i],zfc[k]);&&&&&strcpy(zfc[k],t);&&&&}&&&&&&}&&&&}}
提问者评价
来自团队:
其他类似问题
为您推荐:
其他1条回答
你的zfc数组定义的时候错了,为了简单,直接改成二维的,别用指针了,char zfc[10][100]
指针数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言解析字符串 的文章

 

随机推荐