【c语言】 与倒数第二个字符相同的的个数

前言 

有同学问了我这样一个问题,思路是:首先建立一个数组int array[100]存储字符,再用gets函数输入,统计gets函数存储的字符串的实际长度,ta的做法是int length=sizeof(array)/sizeof(int);来统计实际输入长度,但是最后长度总是100,想一想为什么会出现问题呢?


题目示例:

 输入:abcabaa

分析:倒数第二个字母是‘a’,遍历一遍字符串得出答案

输出:4


小咲提醒:为什么会出现前言的问题呢?

因为申请了一个array[100]这个数组,拥有100个空间,那么输入的字符串全部都保存了这些申请的空间里了,也就是说,即便没有输入任何的字符,这些空间也会存在,不会被释放,就好比你买了一套房子,有100个空间,即使有的空间没有住人,这个房子的整体还存在?那么就不能用上面的方法求实际占用的空间了。那么怎么办呢,这个是就要用c语言不存在“真正的字符串”的一个特性了,具体的内存分配以及背后的道理就不细说了,总之大概是字符串的结束标志是'\0'利用这一点,就可以用一个while(array[len]!='\0')逐步遍历找到最后的实际length了

自我探索

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define length 100//申请的空间大小
int main(){
	int temp = 0;
	char array[length];//申请一个length长度的空间
	int len = 0;//记录gets接收的实际长度
	char value;//记录倒数第二个的字符
	gets(array);
	puts(array);
	//例如"abc" 3
	while (array[len] != '\0'){
		len++;
	}

	//倒数第二个
    value = array[len - 2];
	for (int i = 0; i < len; i++){	
		if (value == array[i]){
			temp++;
		}
	}
	printf("%d", temp);
	return 0;
}

测试 

 

发布了104 篇原创文章 · 获赞 165 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43914278/article/details/101399204