
#include<iostream>
using namespace std;
int main()
{
int character(char a);
char a[20];
int length;
cout<<"请输入一个字符串:"<<endl;
cin>>a;
length=character(a);
cout<<"字符串长度为:"<<length<<endl;
return 0;
}
扩展资料:
return用法:
在C++的关键字,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值
1、C
在C89中,main()是可以接受的。Brian WKernighan和Dennis MRitchie的经典巨著The C programming Language 2e(《C程序设计语言第二版》)用的就是main()。不过在最新的C99标准中,只有以下两种定义方式是正确的:
int main(void)
int main(int argc,charargv[])
当然,我也可以做一点小小的改动。例如:charargv[]可以写成charargv;argv和argc可以改成别的变量名(如intval和charval),不过一定要符合变量的命名规则。
如果不需要从命令行中获取参数,请用int main(void);否则请用int main(int argc,charargv[])。
main函数的返回值类型必须是int,这样返回值才能传递给程序的激活者(如 *** 作系统)。
如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中(如exe文件)加入return 0;,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯。
注意,vc6不会在目标文件中加入return 0;,大概是因为vc6是98年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上return语句了吧!不过,gcc32(Linux下的C编译器)会在生成的目标文件中加入return 0;。
2、C++
C++98中定义了如下两种main函数的定义方式:
int main()
int main(int argc,charargv[])
int main()等同于C99中的int main(void);int main(int argc,charargv[])的用法也和C99中定义的一样。同样,main函数的返回值类型也必须是int。
如果main函数的末尾没写return语句,C++98规定编译器要自动在生成的目标文件中加入return 0;。同样,vc6也不支持这个特性,但是g++32(Linux下的C++编译器)支持。
参考资料:
百度百科——return
strlen中判定字符结束以'\0'为界定符的,您所举的列子里str,s都没有为它们的内存中写入任何您本来应该要写的数据,因此str,s的内存中初始都是些无效数据,即专业术语“垃圾值”,未给已分配的内存中写入数据前,这些内存里都是些无效数据而不是0('\0'),所以strlen不知道str,s的结束界定符在哪里,得出的结果是随机的,依赖这些垃圾值何时会出现'\0',你可以再试下,每次的结果都可能不一样。
解决方法是:memset(str, 0, 100);s='\0';
教科书总是会提醒我们良好的编程习惯是:对分配得到的内存总是先做初始化,然后再使用。您的问题就是str,s还没有初始化,就先开始用strlen来使用它们了。
你的这个程序有挺多错误的,我帮你改了。然后把程序标准的格式重新排版了一下。希望能帮到你,如果还有什么错误或者不明白的地方,你告诉我,咱们共同探讨,共同进步。
#include<stdioh>
#include<stringh>
//函数的申明只能放在这个位置,不能放到主函数里
int alp(char c);
int longest(char str[]);
void main()
{
int i;
char str[100];
printf("enter a string:");
gets(str); //输入字符串
for(i=longest(str);alp(str[i]);i++)
{
//用longest函数找出最长单词的起始位置,依个对字符串中的字符进行输出,知道出现第一个不为字母的地方
printf("%c",str[i]);
}
printf("/n");
}
//判断字符串中的字符是否为字母,如果是字母返回1,不是字母返回0
int alp(char c)
{//在进行判读的时候不能直接用>=或者<=符号,要么去它的相反的集再返回相反的返回值,或者写成a>x && a=x
if( c < 'a' || (c > 'z' && c < 'A' ) || c > 'Z' )
{
return 0;
}
else
{
return 1;
}
}
//找出字符串中的最长的单词,并找出它所在的位置和长度
int longest(char str[])
{
int len=0;//用于记录每一个单词的长度
int length=0;//用于存储最长的单词的长度
int point;//记录每一个单词的起点
int place=0;//用于存储最长的单词所在的位置
int flag=1;//标志符,当开始统计一个单词的长度时至为0,当停止统计单词时改为1
int i;
for(i=0;i < strlen(str)+1;i++)
{
if(alp(str[i]))
{
//当i这个位置的字符为字母时
if(flag)
{
//当标记符为1时,开始记录i的位置,并将标记符改为0
point=i;
flag=0;
}
len++;//将单词的长度加1
}
else
{
//当i这个位置的字符不是字母时,将标记符改为1
flag=1;
if( len >= length )
{
//如果这个单词的长度大于或等于之前记录的最长单词的长度作如下 *** 作
length = len;
place = point;
len = 0;
}
}
}
return(place);
}
s = (char ) malloc(sizeof(char));
只给s分配了1个字节。sizeof(char))=1
s = (char ) malloc(sizeof(char));
int n = strlen(s);
s没有内容却去测量它的字符串长度~~~
别说n=16任何值都有可能,因为strlen是靠null结尾的字符串工作的。
s = strcpy(s, str);
s只有一个字节,你却向s写入9个字节,大错啊!
msdn对strlen和strcpy函数解释
strlen:returns the number of characters in str, excluding the terminal NULL
strcpy:The strcpy function copies strSource, including the terminating null character, to the location specified by strDestination The behavior of strcpy is undefined if the source and destination strings overlap
我在不同的时候在不同的程序里s = (char ) malloc(sizeof(char));
int n = strlen(s);
n还是16
这可能和 *** 作系统虚拟空间和malloc算法有关,可能malloc每回的地址都是一样的,而在16个字节后都有一个null。对你的问题没有讨论的意义,因为可能放到其它平台上或使用另外的malloc算法,这些结果都没有准确的定义。讨论错误的结果是没有意义,没有学习价值!如果你对内存申请分配有浓厚的兴趣,可以直接看malloc源代码。
#include <stdioh>
int length(char s[]) {
char p = s;
int i = 0;
while(p != '\0') {
p++;
i++;
}
return(i);
}
void main() {
char str[50];
int len;
gets(str);
len = length(str);
printf("%d",len);
}
C语言的字符串是由字符数组形式保存的,并约定'\0'(ascii码值为0)作为字符串结束符。其长度为从字符串开始,到'\0'结束,所有字符的个数,不包括'\0'本身。
要获得字符串长度,有两种方法可以使用,使用库函数strlen()。strlen声明在stringh中,原型为int strlen(char str);功能为求str的长度,并返回。对于字符串str, 可以用代码求长度。当str[len]为0时,退出循环,退出后的len值就是str的长度。
:使用strlen函数,包含在头文件stringh里,功能就是计算字符串s的(unsigned int型)不包括'\0'在内的长度。
这是做不到的,任何函数都做不到,因为文件所谓的文件头是人为规定的。
不同的文件格式,所谓的文件头长度也不同。
文件本身并不标识哪里是文件头的尾端。所以计算机不可能知道一个未知文件的文件头到底有多长。
补充:如我所说,每种不同的文件格式,都规定了不同的文件头长度,这是人为规定的,计算机不可能知晓。除非你统计出世上所有的文件格式并且加以判断,我想这是很不现实的。
再补充:如果你不知道它的格式,那么你将无能为力,您对它的任何修改,都可能破坏它的格式,而不是修改(当然不一定破坏它的文件头,有可能破坏,也有可能把A数据当作B数据来读取,或者把不是地址的当作地址,那混乱起来会有什么结果,就不得而知了)。您必须按照它规定的格式,您才能做出有意义的修改或读取,否则只能是破坏。
试想一下,你都不知道文件头的长度,也就不知道文件头在哪里结束,您怎么能知道所谓的“数据”又从那个字节开始呢?
内容被屏蔽了,只好用了
用CFile类的read()函数;他的到返回值就是已经读的子符个数
如CFile f;fopen("d://1txt",可读可写);
char sz[256]={0};
int i=fread(sz,256)//这里的就是读取的个数这里你可以看看一行多少字符数256可以改20看情况
以上就是关于C++编程:写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。全部的内容,包括:C++编程:写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。、关于在vc++中strlen()函数的问题、VC++,写一个函数,实现输入一个字符串,求出其中最长单词。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)