题目:
编写一个程序,输入n(n<6)个字符串,输出其中最短字符串的有效长度,要求定义函数int minlen(char*str[]),int n),用于计算有n个元素的指针数组str中最短的字符串长度。
code
#include<iostream>
#include<string.h>
using namespace std;
int minlen(char *str[],int n);
int main()
{
int n;
char *str[5]; //指针构成的数组,不能输入一个数据,根据输入的数据来分配容量,否则默认为1。
cout<<"please input number:";
cin>>n;
cin.get(); //清除输入流中的回车,因为gets()会从第一个任意字符开始读,到回车停止并且抛弃回车。
int i=n;
while(i--)
{
str[i]=new char[100];
gets(str[i]);
}
cout<<minlen(str,n);
return 0;
}
int minlen(char *str[],int n)
{
int minstr=INT_MAX;
while(n--)
{
if(strlen(str[n])<minstr)
minstr=strlen(str[n]);
}
return minstr;
}
问题记录
1.gets()函数和cin.getline()函数相同,从任意字符读起(包括回车),遇到回车停止读取
2.数组长度的定义不能使用输入的变量。因为数组的长度在编译时就确定了,默认为1,所以无法在程序执行中修改。如果利用输入分配内存需要使用new
3.字符数组的初始化,以a[10]为例:
- cin输入a会自动在最后增加’\0’,实际上只读取9个字符。
- a[10]=“adadadada”;字符串长度要小于10,因为字符串的末尾有’\0’,实际的大小是10。
- 通过for循环实现的挨个元素的赋值要注意,初始设置的数组size=strlen+1,最后一项补’\0’;
4.没有初始化的指针要设定为NULL,否则会越界!
5.要调用字符串的读取函数比如gets,getline等,必须声明数组的size。除gets外,必须指定读取的位数。cin也可以,不过无法读取中间含有空格的字符串。
6.二维数组的内存分配与释放