前言
有同学问了我这样一个问题,思路是:首先建立一个数组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;
}
测试