回 帖 发 新 帖 刷新版面

主题:问题求解!!

用字符数组保存一个英文句子。 
    (1) 删除该英文句子的前导空格、后导空格、句中多余空格(单词之间只留一个空格)。 
    (2) 统计句中某单词出现的次数。
    (3) 查找并替换某单词。 

回复列表 (共7个回复)

沙发

void main(){
    char str[100], res[100];
    scanf("%s", str);
    int start, end , count = 0, i, j;
    for(start = 0; str[start] == ' '; start++);
    for(end = strlen(str); str[end]==' ' && end >= start; end--);
    for(i = start, j = 0, count = 1; i <= end;){
        if(str[i] != ' ') res[j++] = str[i++];
        else {
            count++;
            res[j++] = ' ';
            while(str[i] == ' ')i++;
        }
    }
    res[j] = '\0';
    printf("%s\n%d\n", res, count);
        
}
在编辑框里面直接写的代码,只是大概,可能细节有错误。

板凳

不对呀,不符合要求

3 楼

#include <stdio.h>
#include "stdlib.h"
#include "string.h"
#define  MAX   81                             //定义字符串的最大长度
#define  LEN    20                             //每个单词的最大长度
typedef char DATATYPE ;
typedef struct WordsList
{
      DATATYPE  Word[LEN];
      struct WordsList   *next;
} *List;                                              //单链表用于保存每个单词,并用于查询

void    eatspace(char * , char *);        //吃掉前导和后导空格的函数
int  check_count(char *);                  //记录查到单词出现的次数
void   exchang(char *);                      //查到某单词并改变
void   tip();                                       //大杂烩,待会把函数封一下

4 楼

int main(int argc, char *argv[])
{
       char *cnum ,c_out[MAX];  
       puts("please initial the c_array: ");                            //初始化(注释后来加上,VC装了插件后不能显示中文了,所以装13写的潦草的英文
       cnum = (char *) malloc (MAX * sizeof(char ));
       fgets(cnum ,  MAX, stdin );
       tip();
       return 0;
}

void tip()
{
       int choice ;
       puts("input the num 1,2,3 to operate: ");
       puts("1  delete the extra frontspace  and tailspace:\n" "2  add up some words that has appeared:\n" "3  check and replace the words:\n");
       scanf("%d",&choice);
       switch(choice)
       {
             case 1:
                 {
                           /********************************************************/               // 后来实在不想写第三个函数了,感觉功能和第二个差不多
                 }
             break;
             case 2:
                 {
                          /********************************************************/
                 }
             break;
             case 3:
                 {
                         /********************************************************/
                 }
             break;
             default : /****************************************************/  
       }
}

5 楼

void eatspace(char *cnum , char *c_out)                       //这个思路依稀记得还是原来教材上的,其实用isspace()判断方便多了,这个lz自己思考哈 
{
       int index , words_num , count ;                            //index检索,words_num单词数量,count用于记录保存的字符到c_out[]中
       char prec,now;
       cnum[ 0 ] ==  ' ' ? (words_num = 0) : (words_num = 1) ;           //这个东西想好细节:如果开始有前导空格,words_num得从0开始,见一行注释
       for( count = 0, index = 0 ; index <strlen(cnum) ; index++)
       {
              prec = cnum[index];                                                                  
              now = cnum[index + 1];
              if(  (prec == ' ')  &&  (now != ' ') && (now != '\n'))            //结合这个if用于判断并初始化words_num的值
              {
                    words_num ++; 
              } 
              if(prec == ' '&&(now == ' '||count == 0))                         //遇到多余空格,跳过    
              {
                   continue;
              }
              else
              {
                   c_out[count] = prec ;
                   count ++; 
              }
        }
         c_out[count] = '\0';                                                                 //对于字符数组,估计这个是需要的
         for(index = 0; index < count ;index ++)
         {
                putchar(c_out[index ]);
         }
         printf(" The numbers of the words are :%d\n",words_num);            //打印显示结果
}

6 楼

int  check_count(char *c_out)
{
       char c_check[LEN];                                          //装 输入并需要查询的单词,单词别有空格啊,不然肯定不行的啊
       int   count,index,i ;
       List  L,La,Lb;
       count = i =index = 0;       
       La = NULL ;
       L =   Lb = (List )malloc(sizeof(struct WordsList ));                 //单链表,不解释、、
       do
       {
             if(c_out[index] != ' ')
             {
                  Lb->Word[i] = c_out[index] ;
             }
             else
             {
                   Lb ->Word[i] = '\0';
                   La = Lb;
                   Lb =  (List )malloc(sizeof(struct WordsList *));
                   La ->next=  Lb ;
                   i =-1 ;                                                    //开始新的节点!           
             }
             i ++;
             index  ++;
       }while(c_out[index] != '\0');

       La->next = NULL;

       scanf("%s",c_check);

       while(L != NULL)
       {
            if(0 == strcmp(c_check , L->Word))
            {
                count ++;
            }
            L = L->next ; 
       }
      // printf("%d\n",count);                                                  
       return (count);                                                 //返回出现的单词数
}

//不好意思,在此刷屏,本来很懒,但现在刚开数据结构的课,以前只是把书看了,没练习、、看到这题,想到一年半前的我额 呵呵……

7 楼

谢谢...

我来回复

您尚未登录,请登录后再回复。点此登录或注册