| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1764 人关注过本帖
标题:如何去掉字符串里不必要的空格,包括前面和后面的。
只看楼主 加入收藏
winglesswu
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2013-1-28
结帖率:71.88%
收藏
已结贴  问题点数:3 回复次数:7 
如何去掉字符串里不必要的空格,包括前面和后面的。
要求写一个函数,输出一个新的字符串和字符个数(不包括null),去掉原字符串里不必要的空格,包括前面和后面的,单词和单词之间只能有一个空格。比如:
原字符串为char str[ ] = "   This is    a     test.      "
输出后为:
'This is a test.' contains 15 characters.
下面是小弟写的,但是运行不了,请大侠支招,谢谢。
#include<stdio.h>
#include<string.h>
#include <ctype.h>
int main()
{
   char str[100];
   int i;
 
   printf("Enter some text:\n");
   scanf("%s", str);
   i = compress(str);
   printf ("'%s' contains %d characters.\n", str, i);
}
int compress ( char text[100] )
{
int x, i, j=0, d=0;
char blank[100];
if (isupper(text[i])||islower(text[i]))//确定首个字母的位置
{
for (i<100; i++)
{
      if (!(text[i] == ' ' && text[i+1] == ' '))
      {
        blank[j] = text[i];
        j++;
      }
   }
 }
 
   blank[j] = '\0';
 
   strcpy (text, blank);
   x=strlen(text);
   return x-1;//请问如何返回新的字符串?
   }
搜索更多相关主题的帖子: test include 字符串 Enter 
2013-04-10 08:21
RebelRebel
Rank: 1
等 级:新手上路
帖 子:19
专家分:7
注 册:2013-4-3
收藏
得分:1 
i = compress(str);把这句改成 compress(str);
去除i
用数组来“返回”(其实不能称之为“返回”)结果
int compress ( char text[100] );改成void compress(char texet[100]);
具体再调整其它的,我这有个用数组“返回”结果的例子,你可以参考一下!
程序代码:
#include "stdio.h"
void sum(int a[3][3],int b[3])
{
   int i,j;
   for (i=0;i<3;i++)
   {
       for(j=0;j<3;j++)
           b[i]+=a[i][j];
   }
}

 main ()

 {
     int b[3]={0,0,0},i,j, a[3][3];
   for(i=0;i<3;i++)
   {  for (j=0;j<3;j++)
      scanf("%d",&a[i][j]);
   }
   for (i=0;i<3;i++)
   {   for (j=0;j<3;j++)
       printf("%4d",a[i][j]);
     printf("\n");
   }
   sum (a,b);
   for (i=0;i<3;i++)
       printf("%4d\n",b[i]);

 }



青春,应该是奋斗的,而不是娱乐的。。。。。。。。
2013-04-10 08:47
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:1 
#include<stdio.h>
/*#include<string.h>
#include <ctype.h>    这两个不需要*/

int main()
{
   char str[100];
   int i;
   int compress ( char text[] );
   printf("Enter some text:\n");
   gets(str);   /*这里必须使用gets*/
   i = compress(str);
   printf ("'%s' contains %d characters.\n", str, i);
}
int compress ( char text[] )
{
int x, i=0, j=0, d=0;
/*char blank[100];不需要blank
if (isupper(text[i])||islower(text[i]))//确定首个字母的位置*
/
 while(text[i]!='\0'&&text[i]==' ')
     i++;
for (;text[i]!='\0'; i++)
    if (text[i] == ' ' && text[i+1] == ' ')
        i++;
    else
      {
        text[j]=text[i];
        j++;
      }
   text[j] = '\0';
   return j;//请问如何返回新的字符串?
   }
参考一下这个
2013-04-10 09:34
y3765258
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:172
注 册:2013-4-9
收藏
得分:1 
我发表下我的见解吧,希望对你有帮助。
首先你的思路是对的,但是过程过于复杂,使用资源过多。
其实没必要设置两个数组,只要把原数组通过一定限制,输出即可。
例如初始化数组           char str[ ] = "   This is    a     test.;
int  fun(char *a)
{
int i,j=0;
for(i=0;i<strlen(a);i++)
{
if(i==0&&a[i]==' ') //把第一个字符时空格的情况去掉;
continue;
if(a[i]==' '&&a[i+1]==' ')//把连续空格的情况去掉;
continue;
printf("%c",a[i]);
j++;             //J就是count 计数器   用来返回多少个字符
}
return j;
}
我也是初学者,加个好友,互相帮助。

有问题一起探讨,一起进步。
2013-04-10 10:42
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:1 
楼上的思路还是不错的,多个空格就保留一个空格就好,利用个临时计数变量统计空格的个数,然后进行删除多余的保存一个,其实还有一个点忽略了,就是在删除空格后,字符要移动,比如你从前往后进行检查空格,那么在你删除空格后,要将后面的字符串向前一空若干个字符,这样利用一个数组就可以把结果给存在原来的哦数组中了。

Maybe
2013-04-10 11:35
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
对四楼的代码稍加改作就可以的,自己要动手操作下,这样才能进步。

Maybe
2013-04-10 11:36
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:1 
给你一个思路吧
程序代码:
#include <stdio.h>

int judge(char ch)
{
    if (ch >= 'a' && ch <= 'z')
        return 1;
    if (ch >= 'A' && ch <= 'Z')
        return 1;
    return 0;
}

int main(void)
{
    int i;
    int flag = 1;    //串首空格标志
    int len = 0;
    char str[100];

    gets(str);
    putchar('\"');
    for (i = 0; str[i] ; ++i)
    {
        if (str[i] == ' ')
        {
            if (!judge(str[i+1]) || flag)
            //如果下一个字符不是字母,或者当前空格位于串首,执行continue
                continue;
        }
        putchar(str[i]);
        flag = 0;
        ++len;
    }
    printf("\"  contains %d characters.\n", len);
    
    return 0;
}


[fly]存在即是合理[/fly]
2013-04-10 14:42
winglesswu
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2013-1-28
收藏
得分:0 
谢谢大家的指点。
2013-04-10 23:02
快速回复:如何去掉字符串里不必要的空格,包括前面和后面的。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040313 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved