注册 登录
编程论坛 数据结构与算法

大家帮我看看程序有什么问题(去串中间多余空格)

wszxs26 发布于 2010-11-25 21:09, 597 次点击
本程序是为了去掉字符串中间多余空格
错误地方在下面红色字那,while循环回来再求长就变为0
#include <stdio.h>
#include<stdlib.h>
#include <conio.h>
#include<string.h>

/*定义串的结构*/
#define MAXSIZE  256  
typedef struct
{    char  data[MAXSIZE];/*数组存储串*/
     int   Length; /*串的长度*/
}SeqString;


/*求串长*/
int StrLength(char s[])
{
     int i=0;
     while (s[i]!='\0')  
         i++;
     return(i);
}


/*去掉中间多余空格*/
void QuKongGe(char *s){
    int l;/*求数组长度*/
    int k=0;/*记空格的个数*/
    int i=0,j=0;
    while(s[i]!='\0'){
       l=StrLength(s);//循环求长为何第二次就会出现错误
        printf("%d\n",l);
        if(s[i]==' '&&k==0){
            k++;
            i++;
        }else if(s[i]=' '&&k==1){
            for(j=i;j<l;j++){
                s[j]=s[j+1];
            }
            s[j]='\0';
            
        }else{
            k=0;
            i++;
        }
    }
}

void main()
{
    SeqString s;
    printf("请输入字符串:");
    gets(s.data);
    QuKongGe(s.data);
    s.Length=StrLength(s.data);
    printf("字符串长度是:%d\n",s.Length);
    printf("字符串:");
    puts(s.data);
    getch();
}



[ 本帖最后由 wszxs26 于 2010-11-25 21:13 编辑 ]
4 回复
#2
遮天云2010-11-26 10:40
程序代码:
#include <stdio.h>
#include<stdlib.h>
#include <conio.h>
#include<string.h>

/*定义串的结构*/
#define MAXSIZE  256  
typedef struct
{    char  data[MAXSIZE];/*数组存储串*/
     int   Length; /*串的长度*/
}SeqString;


/*求串长*/
int StrLength(char s[])
{
     int i=0;
     while (s[i]!='\0')  
         i++;
     return(i);
}


/*去掉中间多余空格*/
void QuKongGe(char *s){
    int l;/*求数组长度*/
    int k=0;/*记空格的个数*/
    int i=0,j=0;

    while(s[i]!='\0')
    {
       l=StrLength(s);//循环求长为何第二次就会出现错误
        printf("%d\n",l);
       /* if(s[i]==' '&&k==0)
        {
            k++;
            i++;
        }
*/
       if(s[i]==' ')//改成==
        {
            for(j=i;j<l;j++)
            {
                s[j]=s[j+1];
            }
            s[j]='\0';
            
        }
        else
        {
            //k=0;
            i++;
        }
    }
}

void main()
{
    SeqString s;
    printf("请输入字符串:");
    gets(s.data);
    QuKongGe(s.data);
    s.Length=StrLength(s.data);
    printf("字符串长度是:%d\n",s.Length);
    printf("字符串:");
    puts(s.data);
    getch();
}


试下
#3
wszxs262010-11-26 16:52
回复 2楼 遮天云
我想去掉的是中间多余的空格,也就是说要保留一个,你的方法把所有的空格都去掉了
谢谢你的帮忙啊
#4
wszxs262010-11-26 16:58
回复 2楼 遮天云
我在你的基础上改了下,居然成功了,谢谢你啊
#5
遮天云2010-11-26 23:18
呃,汗,不好意思,我没看清题目,以为是要去掉所有的呢
1