C语言基础问题:我想知道在一个未知长度的字符串要想让判断他的长度,用到'\0'的话,怎么写这个句子?

作者&投稿:贡姚 (若有异议请与网页底部的电邮联系)
c语言编程问题,请高手解答!!~

#include //转小写char tolower( char c){if( c >='A'&& c<='Z')return c-'A'+'a';}//大小写敏感bool findstr( char * instr, char * findstr){char *s = instr;char *t ;while(1){t = findstr;while( *s != *t && *s != '\0')s++;if( *s == '\0')return false;while( *t == *s && *t != '\0' && *s !='\0')s++,t++;if(*t == '\0')return true;}}//大小写不敏感bool findstr_i( char * instr, char * findstr){char *s = instr;char *t ;while(1){t = findstr;while( tolower(*s) != tolower(*t) && *s != '\0')s++;if( *s == '\0')return false;while( tolower(*s) == tolower(*t) && *t != '\0' && *s !='\0')s++,t++;if(*t == '\0')return true;}}//主函数int main(){char str[100];char tarstr[100];int count;int flag;int i;scanf("%s",str);scanf("%d",&flag);scanf("%d",&count);for( i = 0;i< count;i++){scanf("%s",tarstr);if( 1 == flag && findstr( tarstr, str))printf("%s
",tarstr);if( 0 == flag && findstr_i( tarstr, str))printf("%s
",tarstr);}::fflush(stdin);getchar();return 0;}

用动态申请内存的方法可以解决这个问题,有两种措施可以考虑:
设置一个循环,先动态申请一个较小的空间比如10字节,然后输入字符;当输入满时另外申请一个20字节的空间,把已输入的10个字符拷贝过来,释放掉10个字节的空间。然后向20个字节的空间里接着输入字符,写满时再申请一个30字符的空间……如此反复,直到输入'
'时结束。
先动态申请一个较大的空间,如65535字节,直接向里输入字符,输入结束后测出长度,按实际需要另外申请一个空间把字符串拷贝过来,释放原来的空间。
措施1比较切合题意,但时效差,空间也不省(最后一瞬需要近二倍的空间)。措施2显得更有实际意义,因为“无限”的长度肯定是不存在的,所以取一个“够用”的大小临时用一下是可取的。下面提供措施2的参考代码:
//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"#include "string.h"#include "stdlib.h"#define N 65535char *mygets(char *p){ char *ptmp; if((ptmp=(char *)malloc(N))==NULL){//申请一个较大的临时用空间 printf("Application memory failure...
"); exit(0); } gets(ptmp);//向临时空间直接输入字符串 if((p=(char *)malloc(strlen(ptmp)+1))==NULL){//按实际需要申请空间 printf("Application memory failure...
"); exit(0); } strcpy(p,ptmp);//把字符串拷贝所需大小的空间里 free(ptmp);//释放临时空间 return p;}int main(void){ char *str=NULL; printf("Input a string...
str="); str=mygets(str); printf("%s
",str); free(str); return 0;}

char string1[];//string1里存的是字符串;

int length;//length 为字符串的长度;

for(int i =0;string1[i] != '\0';i++)
{
length =i+1;

}
printf ("length=d%",length);

用strlen函数就行了。'\0'是系统在字符串末尾自动添加的,作为结束标志。不过你要用到'\0'是什么意思?


C语言找众数,我想的好复杂,不知道该怎么想问题,运行结果也不对,就在...
我首先是要说思路问题:收集完所有数据后,只保存输入次数的最大值是不够的,还需要判断出输入次数的最小值。只有最大值==最小值的时候才能判断出所有数字的输入次数都一样。然后是代码格式问题:很多for语句和if语句你没有写大括号,还有一些代码3个分号写了一行。这在正规项目中是不允许的,因为...

c语言基础问题
x++是一个表达式,它的值是x的当前值。x的当前值是5,因此表达式x++的值是5。5>5不成立,因此执行else语句。对表达式x++求值还会导致x的值增加1,这称为表达式x++的副作用。在执行else语句前,副作用已经发生,x的值变为了6。然后执行else语句,输出表达式x--的值,同理,是x的当前值6,因此...

c语言基础问题
结果与编译器相关。Ansi C只是语言标准。具体编译器的实现,并不一定与其一致。比如, VC6中编译器的实现就有许多微软自己定的规则。Visual Studio 2003后的c、c++编译器会比较符合ansi标准。所以,想知道程序是如何运行的,可以看一下编译后的汇编代码。IDE都有这个功能。分析以下汇编代码:int ret = ...

我想学日语,零基础。应该先学什么?
一、五十音 对于每一个日语学习者来说,五十音都是必须面对的第一关,五十音之于日语就犹如拼音之于中文。学会了五十音,基本就意味着你看见日语(带假名的)就能读出来,重要性不言而喻。五十音虽说叫 五十音,实际上只有45个清音,由45个平假名和45个片假名组成。这里不详细介绍五十音是什么...

关于java语言的基础问题
do while循环, 你可以去看看while循环和do while循环的区别。while()括号里面是循环的条件,满足就执行,do while会先执行一遍循环的内容在判断,而while循环会先判断再执行。

请问我想学习计算机编程但没有任何基础,不知学习哪种语言?请前辈...
还有很多人说自己的基础很差,甚至中学毕业什么的。其实这个并不重要,比较说英语,在计算机语言里所用到的单词量很少,而且都是常用词,经常使用就记住了。当然,如果你要看原文资料或者帮助的话,专业词汇比较多,不过在金山词霸的帮助下,经常看,也是没什么大的问题的。至于数学什么的,其实数学只是...

我想学【自学】【英语】却没任何基础
那就天天缠着他们,多问问题!!!(网络上有很多关于新概念的资料,去www.verycd.com看看,搜索新概念,里面有书的PDF和文章的朗读)把2、3、4都背完,我用...语言生动,每篇文章都配有漫画,图文并茂,幽默风趣,能极大地提高学生英语的学习兴趣;第一册也是一本经典地道的口语教材。可以训练学习者基本语音、语调(包括...

易语言基础问题
一、编辑框的属性里:1.最大允许长度=10;2.输入方式=输入整数 二、.版本 2 .子程序 _编辑框1_失去焦点 .判断开始 (取文本长度 (编辑框1.内容) > 4).默认 信息框 (“输入不能少于5位数”, 0, “提示:”).判断结束

我想学习C语言编程应该怎么学事半功倍
:)书当然要看好书,只有好书才营养丰富。假如你花了1天时间看了一本破书,而该书介绍的知识虽然对于你来说是全新的知识,但是由于书中组织不当、或者深度不够,使你获取的营养很少,还不如自己研究一天来的快,这种书就不值当看了。学习C语言要看那些好书?我认为首先要把基础书给看扎实了,比如...

一个c语言基础性问题、
如果是有符号数,则最高位为符号位,0表示正数,1则表示负数。正数用原码表示,负数则用补码表示(所谓补码是指将原码求反后加1所得)。对于1个字节,位的编号从低到高是0...7,即bit7是符号位,0...6位为数值。对于-1,原码是1,即0000001,求反后为1111110,再加1得1111111,添加符号位后为...

大观区17196818728: C语言基础问题:我想知道在一个未知长度的字符串要想让判断他的长度,用到'\0'的话,怎么写这个句子? -
犹腾尤尼: char string1[];//string1里存的是字符串;int length;//length 为字符串的长度;for(int i =0;string1[i] != '\0';i++) {length =i+1; } printf ("length=d%",length);

大观区17196818728: C语言如何定义长度未知的数组最近在练C语言时遇到一个问题,想定义
犹腾尤尼: C语言在数组个数未知的情况下,根据应用情况不同,有三种方式.1,数组元素总数未知,但是需要存储的内容是已知的.其实这是一种变相的已知个数,只是编程者不...

大观区17196818728: 关于C语言的一些基础问题 -
犹腾尤尼: 以下是我的理解,不知道是这个意思不?如果不是的话,可不可以再说明白一点或者举个例子也行~#include <stdio.h> void main(){ char c; printf("1.睡觉\n"); printf("2.游戏\n"); printf("3.骂人\n"); scanf("%c",&c); system("cls"); //printf("\...

大观区17196818728: 一个C语言的基础问题VeryEasy!我只是一个对C语言还没入门
犹腾尤尼: 上面的几位讲得都没有错呢,不过我想,因为你是初学者,他们这样说,你可能还不是很清楚,所以我想讲得更详细一点,希望我的表达能力可以做到. 在c语言里,整型...

大观区17196818728: C语言中如何将未知个数的数存放在一个数组中? -
犹腾尤尼: 在C语言中数组的定义必须指明维数,即使没有指明维数,也必须进行初始化,编译器通过初始化列表中的元素个数来确定数组的维数,比如下面的代码: int a[] = {1,2,3}; 虽然没有指明数组的维数,但是编译知道数组a的维数是3(只有三个元...

大观区17196818728: 关于C语言写代码的几个基础问题01
犹腾尤尼: /* 不对数列a 赋初值 {' '} 的话会出现什么情况? */赋初值只不过是为了能给数组有个确定的值,如过不赋初值,后面程序中又没有给数组赋值,那么里面是随机值. * 一定要加[i]? 如果去掉[i] 直接是a的话 可以直接输入吗? 可以的话 是由a[0]开...

大观区17196818728: 一个C语言基础问题... -
犹腾尤尼: i++和++i正如前几楼说的有区别,但在for循环里这样用结果应该没有影响,如你所示for(i=1;i<=100;i++)s=s+i;其执行顺序: 1. i=1; 2. s=s+i; 3. i<=100; 4.i++;(或++i) 5.重复2...

大观区17196818728: 关于c语言基础的一个问题 -
犹腾尤尼: 不打钩好多年~~ps:楼主,我错了,主要问题是k未初始化 其他没问题我试过了. 还有这句话啥意思?:当我把上面的数值改到35000以下时计算没问题,可一改到35000以上就算不出答案了 这是为什...

大观区17196818728: 一个C语言的基础问题 -
犹腾尤尼: 解答:1、 c语言是以分号做为语句的结束.for循环是一个语句所以就必须得有分号,不然编译无法通过,出现语法错误.for语句是循环条件和循环体的组合.你这里给出了循环条件,但是没有循环体.循环体为空.然后以分号表示这个for语句...

大观区17196818728: 你们好我有哦 C语言不知道的问题 请高手帮忙
犹腾尤尼: 虽然if(m++>5)后面的printf(“%d\n”,m)不执行,但是括号里面的m++还是要执行的,所以m就成了6了.第二个的意思是你输入一个数存入x中,如果它比12大,则把x+10赋给y,如果它比12小,就把x-12赋给y.最后输出y

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网