版权声明:【本文为博主原创,未经博主允许不得转载】
实验题,需要做的函数为
输入一个字符串,删除字符串中的所有空格,输出删除空格后字符串的长度,需编写以下功能函数:
1、编写函数void input(char *str),函数的功能是输入一个字符串。
2、编写函数void trim(char *str),函数的功能是从一个字符串中删除所有的空格。
3、编写函数 void length(char *str,int *l),利用指针l返回字符串的长度。
主函数为
1、编写主函数main测试上述函数,代码如下:
void main()
{
char str[100];
int l;
input(str);
trim(str);
cout<<"The string after triming is "<<str<<endl;
length(str,&l);
cout<<"The length of the string is "<<l<<endl;
}
2、期望的运行结果如下:
需要分别实现这些函数。于是轻易写出input与length2个函数分别为
void input(char *str)
{
char *a;
a = str;
// scanf("%s",a);
cout<<"Please input a string:";
cin>>a;
}
void length(char *str,int *l)
{
*l=strlen(str);
/* printf("strlen(str)=%d\n",*l);*/
}
于是在博客中找了众多的删除空格算法成功是这个函数:
void trim(char *str)
{
int len,k,i;
if (str == NULL)
return;
len = strlen(str);
k = 0;
for (i=0; i<len; i++)
{
if ((str[i] != ' ')&&(str[i] != '\n'))
{
str[k]=str[i];
k++;
}
}
str[k]='\0';
return;
}
但是关于基础的小细节在这边卡了很多天。
如下运行结果发现只有节制前一段字符串后面的自动获取失败。最后无意间发现一篇博客里面的注释
/* cout<<endl;如果用scanf来接收字符串的话,
字符串中不能含有空格,否则将以空格作为串的结束符。
如果你键入得是hello world 那么实际上scanf只能获取
hello 这个单词。所以要接收空格的话可以用gets()
这个函数。gets(str)是读入一串以回车结束的字符,
顺序存入到以str为首地址的内存单元中,最后写入字符
串结束标志 “\0 */
才找对了方向并不是算法错误 而是输入函数的错误、将cin>>a;改为gets(str); 终于实现功能。