strlen求字符串写法
时间: 2024-02-22 20:51:23 浏览: 137
strlen函数是C语言中的一个字符串函数,用于计算字符串的长度,即字符串中字符的个数(不包括字符串末尾的'\0')。其函数原型为:
```c
size_t strlen(const char *s);
```
其中,参数s是指向要计算长度的字符串的指针。函数返回值是字符串的长度。
strlen函数的实现方式可以有多种,以下是一种常见的实现方式:
```c
size_t strlen(const char *s) {
const char *p = s;
while (*p != '\0') {
p++;
}
return p - s;
}
```
该实现方式使用了指针p来遍历字符串,当p指向字符串末尾的'\0'时,循环结束。最后返回p与参数s之间的差值,即字符串的长度。
相关问题
如何在C字符串常量中嵌入其他文本?
在C语言中,如果你想在字符串常量(也称为字面常量或"char array")中嵌入其他文本,你可以使用字符串连接操作。最常见的方式是使用`'\0'`字符结束字符串,然后用`.`运算符连接两个字符串。这里有一个简单的例子:
```c
#include <stdio.h> // 包含<stdio.h>是为了使用printf函数
int main() {
const char str1 = "Hello, ";
const char str2 = "world!";
// 使用 '.' 运算符连接两个字符串
const char result[] = str1 str2; // 注意:C99及以后版本才支持这种写法
printf("Combined string is: %s\n", result); // 输出: Hello, world!
return 0;
}
```
然而,上述方法仅适用于C99标准之后的语言版本。在C89或更早的标准中,你需要创建一个新的数组并将它们手动复制到一起:
```c
const char str1[] = "Hello, ";
const char str2[] = "world!";
// 创建新的字符串并复制数据
size_t len1 = strlen(str1);
size_t len2 = strlen(str2) + 1; // 加1是因为str2结尾有'\0'
char combined[len1 + len2];
strcpy(combined, str1);
strcat(combined, str2);
printf("Combined string is: %s\n", combined);
```
/*调用merge函数,实现将指针s所指的字符串的反序和正序连接*/ #include<stdio.h> #include<string.h> int main() { char str[100]; void merge(char *s);//声明要调用的函数 printf("Please enter a string:"); gets(str); merge(str); return 0; } void merge(char *s) { char *p,*q,n; n= strlen(s);//n为指针s指向的串的长度 for(p=s+n-1,q=s+n;p>=s;p--,q++) *q=*p;//反序存放 *q='\0'; //添加字符串结束标记 }可以指出这个和之前的区别吗?我学习一下
这个代码和之前的代码相比,主要有以下几个区别:
1. 在调用merge函数之前,只声明了merge函数的名称,而没有声明函数的参数类型和返回值类型。这种写法在C语言中是允许的,但是不够规范,不利于代码的维护和阅读。
2. 在调用merge函数之后,没有输出结果,无法查看程序的执行结果。建议添加一行代码,输出合并后的字符串。
3. 在merge函数中,变量n的类型为char,不太合适,因为字符串的长度通常超过了char类型的范围。建议将n的类型改为int。
4. 在merge函数中,反序存放字符串的代码没有问题,但是正序存放的代码却没有出现。按照题目的要求,merge函数应该实现将指针s所指的字符串的反序和正序连接,也就是说,需要在反序存放后,再将原字符串正序存放一遍。这个问题需要在代码中补充一下。
完善后的代码如下:
```c
#include<stdio.h>
#include<string.h>
void merge(char *s);
int main() {
char str[100];
printf("Please enter a string:");
gets(str);
merge(str);
printf("Result:%s\n", str);
return 0;
}
void merge(char *s) {
char *p,*q;
int n = strlen(s);
for(p=s+n-1,q=s+n;p>=s;p--,q++)
*q=*p;//反序存放
for(p=s,q=s+n;p<s+n;p++,q++)
*q=*p;//正序存放
*q='\0'; //添加字符串结束标记
}
```
阅读全文