c++关于删除空格

版权声明:【本文为博主原创,未经博主允许不得转载】 

实验题,需要做的函数为

输入一个字符串,删除字符串中的所有空格,输出删除空格后字符串的长度,需编写以下功能函数:

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); 终于实现功能。

猜你喜欢

转载自blog.csdn.net/han_574/article/details/80070986