用指针、递归、strlen方式求字符型数组长度

10 篇文章 0 订阅
9 篇文章 0 订阅
int Strlen(const char* str)
{
	if (*str == '\0')
	{
		return 0;
	}
	else
	{
		return 1 + Strlen(str + 1);
	}
}
int my_strlen(char* str)
{
	char* start = str;
	char* end = str;
	while (*end != '\0')
	{
		end++;
	}
	return end - start;
}
int main()
{
	char arr[] = "asfhksrfgls";
	int length = sizeof(arr) / sizeof(arr[0]);//包含了'\0'在内,所以不能用该方法计算字符型数组
	printf("1.my_strlen()=%d\n", my_strlen(arr));
	printf("2.length=%d\n", length);
	printf("3.strlen=%d\n", strlen(arr));
	printf("4.digui=%d\n", Strlen(arr));
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用字符指针字符数组来实现对于每个单词的反转,不需要使用归或者函数调用等循环结构。 以下是使用字符指针的示例代码: ```c #include <stdio.h> #include <string.h> int main() { char str[] = "Hello World"; char *start = str; char *end = str + strlen(str) - 1; // 反转字符串 while (end > start) { char temp = *start; *start = *end; *end = temp; start++; end--; } printf("%s", str); return 0; } ``` 这段代码会将字符串 "Hello World" 反转输出为 "dlroW olleH"。 ### 回答2: 可以使用C语言中的指针和循环来实现不使用函数循环输入字符串,并对每个单词进行逆置的操作。 首先,我们可以定义一个字符数组来存储输入的字符串。假设数组名为str,长度为n。然后使用循环来逐个读取输入的字符,并将其存储到数组中,直到遇到换行符为止。 接下来,我们可以使用两个指针来标记每个单词的起始位置和结尾位置,并使用循环来遍历整个字符数组。具体步骤如下: 1. 定义两个指针start和end,初始时均指向第一个字符的位置。 2. 使用while循环遍历整个字符数组,直到遇到字符串结尾标志'\0'为止。 3. 在循环中,首先移动end指针,直到end指向空格或者字符串结尾。这样,start指向的位置到end指向的位置就是一个单词。 4. 然后,使用一个循环,将start指针和end指针之间的字符逆置。 5. 最后,将start指针指向end指针之后的第一个字符,继续循环,直到整个字符数组遍历完成。 代码如下: ```c #include <stdio.h> #include <string.h> int main() { char str[100]; printf("请输入字符串:"); fgets(str, sizeof(str), stdin); // 循环读取输入的字符串 char *start = str; // 起始指针 char *end = str; // 结尾指针 while (*end != '\0') { if (*end == ' ' || *end == '\n') { // 如果遇到空格或换行符,就进行逆置操作 char *p = end - 1; while (start < p) { char temp = *start; // 交换字符 *start = *p; *p = temp; start++; p--; } start = end + 1; // 更新start指针的位置 } end++; } printf("逆置后的字符串为:%s", str); return 0; } ``` 通过以上代码,我们可以实现在不使用函数的情况下,循环输入字符串并对每个单词进行逆置操作。 ### 回答3: 一个不使用函数的方法是使用指针和循环来逆置每个单词。首先,我们定义一个字符数组来存储用户输入的字符串。然后,我们使用循环来一次读取每个字符,并使用指针来指向每个单词的开始和结尾。对于每个单词,我们使用两个指针分别指向单词的开始和结尾字符,并通过交换它们来逆置单词。以下是一个示例的代码: ```c #include <stdio.h> int main() { char sentence[1000]; // 定义一个字符数组用于存储用户输入的字符串 printf("请输入字符串:"); scanf("%[^\n]", sentence); // 读取包含空格的字符串 char *start = sentence; // 指向当前单词的开始字符 char *end = sentence; // 指向当前单词的结束字符 while (*end != '\0') { if (*end == ' ') { // 当遇到空格时,逆置单词并重置开始和结束指针 char *ptr1 = start; char *ptr2 = end - 1; while (ptr1 < ptr2) { // 交换字符来逆置单词 char temp = *ptr1; *ptr1 = *ptr2; *ptr2 = temp; ptr1++; ptr2--; } start = end + 1; // 更新开始指针为下一个单词的开始字符 } end++; // 更新结束指针指向下一个字符 } // 逆置最后一个单词 char *ptr1 = start; char *ptr2 = end - 1; while (ptr1 < ptr2) { char temp = *ptr1; *ptr1 = *ptr2; *ptr2 = temp; ptr1++; ptr2--; } printf("逆置后的字符串:%s\n", sentence); return 0; } ``` 这段代码通过循环遍历字符串中的每个字符,并在遇到空格时逆置之前的单词。最后,它打印出逆置后的字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值