C++编程:写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。

C++编程:写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。,第1张

#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++,写一个函数,实现输入一个字符串,求出其中最长单词。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9531943.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存