f(char *s) {char *p=s; while (*p!='\0') p++; return(p-s); } main() {printf("%d\n",f("ABCDEF")
作者&投稿:双华 (若有异议请与网页底部的电邮联系)
以上程序是C语言,意思是“输出字符串的长度”。
c语言:
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。
while(*p!='\0') p++;
把while后面的分号去掉,不然p只加一次,返回总是1。
// 【"ABCDEF"】 保存的时候实际是 : 【"ABCDEF\0"】
// 注意最后的 "\0" 【是一个】表示 ascill 为 0 的字符,
// 而【不是两个】字符 "\" 和 "0"
// 这称为转义字符
// C 语言为什么要这么保存一个字符串呢?
// 答案是:如果字符串不加上 "\0" ,C 语言将不知道一个字符串【在哪里结束】!!!
// 注:
// 转义字符是为了输入一些特殊字符而设置的,同样的还有 "\n"(回车)等
// 有了这个知识,我们就能来分析程序了!!!
#include<stdio.h>
// 先告诉你:函数 f 的【作用】实际是【求字符串 s 的长度】
// 也就是字符串 s 【包含的字符个数】(不包括结束符号 "\0")
int f(char *s)
{
// 因为 s 是一个【字符串的首地址】(首地址就是第一个字符的地址),
// 把 s 赋值给指针 p ,则 p 也是 s 指向的字符串的首地址
char *p=s;
// 下面的 while 循环的意思是:
// 当指针 p 指向的 s 中的字符【不是 "\0"】
// 则指针 p 指向字符串中的下一个字符,循环继续
//你应该认识 "\0" 了,它就是一个字符串结束的标志符号
while (*p != '\0')
p++;
//退出上面的 while 循环到达这里的时候,
//指针 p 【已经指向了字符 "\0"】
//如下所示(建议【拷贝到记事本】中看哦!)
// "ADBDEF\0"
// ^ ^
// 1234567
// ^ ^
// s p
// 很明显,你知道 ( p-s ) 的含义了,
// 它就是字符串中的字符个数(不包括结束符号"\0")
return(p-s);
}
int main()
{
//通过上面的分析知道,这里将输出字符串 "ABCDEF"
//中的字符个数,也就是: 6
printf("%d\n",f("ABCDEF"));
return 0;
}
结果是6
f(char * s)是一个检查字符串长度的函数 首先取得字符串开头位置的指针s
令p=s 令p递增 直到p指向的位置为'\0'(字符串结尾的标志)
然后返回p-s 即字符串长度
主函数中检查了"ABCDEF"的长度并打印出来
结果就是6 啊
没啥解释的 这么简单的代码 就是计算字符串的长度是几个字节(不包含\0)
类似 strlen()
此时p指向字符串结尾的后一个地址(由于++后置,*p++为取当前*p值后p加1),
所以p-a-1为字符串减去\0后的长度
大季刮盆炎:[答案] 结果是6 f(char * s)是一个检查字符串长度的函数 首先取得字符串开头位置的指针s 令p=s 令p递增 直到p指向的位置为'\0'(字符串结尾的标志) 然后返回p-s 即字符串长度 主函数中检查了"ABCDEF"的长度并打印出来
动力区15079035565: C语言用一个f(char *s)函数把字符串内容逆置 - ?
大季刮盆炎: 用指针
动力区15079035565: 编写一个函数f(char*s),其功能是把字符串中的内容逆置. - ?
大季刮盆炎: 12345678910111213141516171819202122 #include<stdio.h>#include <string.h> char* f(char*s) { intlen=strlen(s); char* p=s; char*q=s+len-1; chart; while(p<q) { t=*p;*p=*q; *q=t; ++p; --q; } returns; }//测试 intmain() { charstr[]="abc"; printf("%s", f(str)); return0; }
动力区15079035565: f(char *s) {char *p=s; while (*p!='\0') p++; return(p - s); } main() {printf("%d\n",f("ABCDEF")?
大季刮盆炎: 结果是6 f(char * s)是一个检查字符串长度的函数 首先取得字符串开头位置的指针s 令p=s 令p递增 直到p指向的位置为'\0'(字符串结尾的标志) 然后返回p-s 即字符串长度 主函数中检查了"ABCDEF"的长度并打印出来
动力区15079035565: f(char *s) {char *p=s; while(*p!='\0'); p++; return (p - s); } main() {printf("%d\n",f("ABCDEF")); } - ?
大季刮盆炎: while(*p!='\0') p++; 把while后面的分号去掉,不然p只加一次,返回总是1.
动力区15079035565: 解释C语言 - ?
大季刮盆炎: #include void f(char *s,char *t) {char k; k=*s;*s=*t;*t=k; s++;t--; if(*s)f(s,t); } main() { char str[10]="abcdefg",*p; p=str+strlen(str)/2+1; /*str是字符串数组的首地址,strlen(str)/2+1=4,是将首地址往后移到第五个元素e,并令P指向这个地址*/ f(p,p-2); ...
动力区15079035565: 函数int f(char *s,char *t)实现获取字符串t在字符串s中最左出现的下标值,若在s中查找不到字符串t,则返 - ?
大季刮盆炎: #include <string>#include <iostream> using namespace std; int f(char *s,char *t) { int i=-1; if(strstr(s,t)) { while(true) { if(*s++==*t) { i++; break; } i++; } } return i; } int main() { //s 包含t char *s1="1abcdefabcd"; char *s2="abcd"; cout<<"\""<<s2<...
动力区15079035565: int f(char*s)求解?
大季刮盆炎: 这个程序的目的是打印goodbye !这个字符串的长度.输出应该是8,它用指针找到字符串的结束地址,然后减去起始地址.由于是char * 类型,所以结果也是这个类型.
动力区15079035565: 编写一个函数int countCharOfStr(char *s, char ch), 函数的功能是统计字符串中指定字符出现的次数并返回 - ?
大季刮盆炎: 展开全部# include int countCharOfStr(char *s, char ch); void main(){ char s[20] = {'a','b','c','d','e','a','b','a' }; char ch = 'a'; countCharOfStr(s,ch); } int countCharOfStr(char *s, char ch){ int i=0,cout=0; do{ if(s[i]==ch)cout ++ ; i++ ; } while(s[i] !='\0'); // 判...
动力区15079035565: C编程问题?
大季刮盆炎: void f(char*s,char *t) {char k;k=*s;*s=*t;*t=k;s++;t--; //移动指针位置,s从e移动到g的下一个位置即:'\0'//t从d移动到a的前一个位置,但只处理到a,因为if(*s)的约束if (*s)f(s,t); } int main() {char str[10]="abcdefg",*p;p=str+strlen(str)/2+1...