主题:问题求解!!
1335711071
[专家分:0] 发布于 2011-02-24 18:43:00
用字符数组保存一个英文句子。
(1) 删除该英文句子的前导空格、后导空格、句中多余空格(单词之间只留一个空格)。
(2) 统计句中某单词出现的次数。
(3) 查找并替换某单词。
回复列表 (共7个回复)
沙发
ggzwtj [专家分:10] 发布于 2011-02-25 09:54:00
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);
}
在编辑框里面直接写的代码,只是大概,可能细节有错误。
板凳
1335711071 [专家分:0] 发布于 2011-02-25 19:29:00
不对呀,不符合要求
3 楼
fragileeye [专家分:1990] 发布于 2011-02-27 02:31:00
#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 楼
fragileeye [专家分:1990] 发布于 2011-02-27 02:32:00
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 楼
fragileeye [专家分:1990] 发布于 2011-02-27 02:33:00
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 楼
fragileeye [专家分:1990] 发布于 2011-02-27 02:33:00
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 楼
1335711071 [专家分:0] 发布于 2011-03-07 20:19:00
谢谢...
我来回复