weixin_43367986 2018-11-24 11:49 采纳率: 0%
浏览 568

初学字符串的实际工程问题4,5,6

编程任务编号 L: 压缩空格和换行符
任务描述
将网页中文本复制到文本编辑中经常会产生大量的连续空格和换行符。现在要求将连续的空格压缩为1个空格,连续的换行符压缩为1个换行符。
输入
1个字符以上的任意长度英文文本。注意,文本可能会很长,很长,很长。
输出
压缩空格和回车后的文本。
输入举例
It is a cat,

I like it.
输出举例
It is a cat,
I like it.
我的程序:
#include
#include
#include

int main()
{
char sentence[100001];
int i,len;

    gets(sentence);
    len=strlen(sentence);

    for(i=0; i<len; i++)
    {
        if((sentence[i+1]!=32)&&(sentence[i]==32)||(sentence[i+1]!=32)&&(sentence[i]!=32)||(sentence[i+1]=32)&&(sentence[i]!=32))
            printf("%c",sentence[i]);
    }
    scanf("\n");
    scanf("\n");
    printf("\n");
    gets(sentence);
    len=strlen(sentence);

    for(i=0; i<len; i++)
    {
        if((sentence[i+1]!=32)&&(sentence[i]==32)||(sentence[i+1]!=32)&&(sentence[i]!=32)||(sentence[i+1]=32)&&(sentence[i]!=32))
            printf("%c",sentence[i]);
    }
    return 0;
            -------------------------------------------------------------------------------
            编程任务编号 M: 统计单词数
            任务描述

在写文档或投稿时经常需要计算一篇文档中的单词数,先给定一篇英文的文档,请统计单词的个数。在此“1个单词”定义为:一个或多个空格或换行符分隔的字符串计为一个单词。当然,连续的空格和换行符不是“1个单词”。虽然这个定义不甚准确但实用。
输入
1个字符以上的任意长度英文文本。注意,文本可能会很长,很长,很长。输入中单词的个数可能达到4294967296(即2的32次方)个。
输出
单词的个数。
输入举例
It is a cat,

I like it.

输出举例
7
注意事项
注意:

1:应该注意考虑特殊情况:例如文章开始处有若干空格或者回车的情形。

2:当以如下的方式使用字符数组输入字符串数据时:
char str[此处为足够大的数组元素个数];
scanf("%s",str);
当输入字符串中包含空格、回车或者跳格字符时,空格、回车和跳格将被认为是2个字符串之间的分隔,因此用这种方法输入的字符串中不可能包含空格、回车和跳格字符的。
3:当需要以行为单位,输入一行一行的字符串,那么可利用gets(str)来输入一行字符串是,输入到字符串变量中的字符可包含空格和跳格字符,但是不能包含回车字符。对于没有给定数据长度的情况,可以利用gets( )函数的返回值为为空(它输入数据已经输入完毕)来判断输入是否结束。例如,如下形式。
char str[足够大的元素个数];
while (gets(str)!=NULL)
{
//每循环一次,处理每一行字符串
}
4:如果需要单个字符处理,则必须使用scanf("%c",&c);或者 ch=getchar();此时,不管任何字符都可以输入到字符变量中包括空格、回车和跳格字符。
while(scanf("%c",&ch)
{
//每循环一次,处理一个字符
}
我的程序:
#include
#include
#include
int main()
{char word[100001];
int len,i,sum=0;
gets(word);
len=strlen(word);
for(i=0;i<len;i++)
{
if(word[i]==32&&word[i+1]!=32)
{
sum++;

     }

}

scanf("\n");
scanf("\n");
printf("\n");

gets(word);
len=strlen(word);
for(i=0;i<len;i++)
{
if(word[i]==32&&word[i+1]!=32)
{
sum++;

     }

}

printf("%d",sum);

return 0;

}

编程任务编号 T: 英汉字典之(初级版)
任务描述
请设计一个简单的英汉字典实现从英文到汉语的翻译。

输入
第一行包含一个数字n(1≤n≤100),表示字典中词条的数目。每个词条的第一个空格前是一个英文单词,其后为中文解释。英文单词的字母个数不超过50个。中文解释的长度不超过200个汉字(包括标点和空格)。紧接着一个整数k(1≤k≤n),表示需要查阅的英文单词个数。其后k行,包含k个单词。

输出
查出每个单词的中文含义。每个单词的输出单独占一行。如果这个单词不存在,则输出Sorry, not in this dictionary!

输入举例
8
this 这, 这个, 今, 本
is 是
a 一(非特指)
super 超级的,上等的, 特大的, 特级的, 十分的, 过分的, 极好的
simple 简单的, 简易的, 朴素的, 简朴的, 天真的, 率直的, 无经验的, 易受骗的
English 英文的, 英国人的, 英格兰的, 英国人, 英语
Chinese 中国的, 中国人的, 中国话的, 汉语的, 中国人, 中国话, 汉语, 中文
dictionary 字典, 词典, 辞典
3
English
english
dictionary
输出举例
英文的, 英国人的, 英格兰的, 英国人, 英语
Sorry, not in this dictionary!
字典, 词典, 辞典
我的程序:
#include
#include
#include
int main()
{
char ENGLISH[51],word[51],CHINESE[201];
int times,n,j=0,i,I=0;
scanf("%d",&times);
while(times--)
{
scanf("%s%s",ENGLISH[I],CHINESE[I]);
I++;
}
scanf("%d",&n);
while(n--)
{
scanf("%s",word);
for(i=0;i<times;i++){
if(word==ENGLISH[j]){
printf("%s",CHINESE[j]);
printf("\n");}
j++;}

   }
return 0;

}

编程任务编号 S: 输入法菜单的循环切换
任务描述
为了方便我们的输入中文、英文,现在我们通常会在操作系统中安装多个输入法,当需要某种输入法时,通过反复按快捷键"Ctrl+Shift"在所有输入法循环切换,直到需要的需要发出现就停止。每按一次"Ctrl+Shift"快捷键,切换到当前输入法的后一个输入法。我们假设输入法在输入法栏中的排列顺序是不变的。当我们知道当前的输入法,那么就能确定切换若干次后是哪种输入法。
输入
第一行输入一个正整数n(1≤n≤100),表示已经安装了输入法的个数。其后的n行,每行表示种输入法的名称,名称长度不超过50个英文字符。 紧接下来的一行包含一个整数k(1≤k≤100),每行表示一次表示切换操作。每行有2个整数。第一个表示当前输入法的序号(从上到下,编号从1开始),第二个表示按"Ctrl+Shift"键的次数。
输出
输入每次操作后所切换到的输入法。每次操作单独占一行。
输入举例
5
Sogou Pinyin
Google Pinyin
QQ Pinyin
Microsoft Pinyin
Tsinghua Ziguan Pinyin
5
2 4
3 5
4 6
5 7
5 19
输出举例
Sogou Pinyin
QQ Pinyin
Tsinghua Ziguan Pinyin
Google Pinyin
Microsoft Pinyin
注意事项
输入数据是请注意,接收第一整数之后,下面要输入的字符串,如果没有将输入整数后的那个回车忽略,那么下次接收字符串的时候就会读入那个回车符,导致输入不正确。处理办法由多种。方法1:可以在接收第一个整数的scanf("%d ",&n);注意这里在%d后添了一个 ,这样就能将那个回车符忽略掉。接下来接收字符串的时候用gets()就是正确地接受到第一个拼音输入的名称。方法二:使用一个额外的getchar()将这个回车读走,也可以!
我的程序:
#include
#include
#include
int main()
{
char srf[51][51];
int n,i,j,a,b,result,m;
scanf("%d",&n);
for(j=0;j<n;j++)
{
scanf("%s",srf[j]);

}
scanf("%d",&i);
for(m=0;m<i;m++)
{
    scanf("%d%d",&a,&b);
    result=(a+b)%n;
    printf("%s\n",srf[result-1]);
}



return 0;

}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 想问一下stata17中这段代码哪里有问题呀
    • ¥15 flink cdc无法实时同步mysql数据
    • ¥100 有人会搭建GPT-J-6B框架吗?有偿
    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决