鱼C论坛

 找回密码
 立即注册
查看: 4962|回复: 5

一道作业题,字符串中提取出单词,然后插入空格。

[复制链接]
发表于 2016-10-4 06:56:01 | 显示全部楼层 |阅读模式
1鱼币
题目:
If you look at a newspaper you will see that the writing is justified (spread out) to fit into the columns.  Write a program that reads in two lines of text and justifies the lines to fit into a column width of 50.  Your program should include three functions:
- readline that reads in a line of text of not more than 50 characters, and returns its length
- countgaps that counts and returns the number of gaps between words in a line of text
- display that prints out a justified version of a line of text

When your program is running, the screen should look something like this:
Enter first line of text: Good morning how are you?
Enter second line of text: I’m good thanks, and how are you?

12345678901234567890123456789012345678901234567890
Good        morning       how       are       you?
I’m    good    thanks,    and    how    are   you?
The justification is done by counting the number of gaps in the text.  In the above examples, there are 4 and 6 gaps respectively in the two lines.  Then each gap must have an equal share of spaces added to it with any left over spaces being distributed one per gap until they run out.  In the first line of the example, the first gap has 8 spaces and the other three gaps have 7 spaces each.  In the second line of the example, the first five gaps have 4 spaces each and the last gap has 3 spaces.

Notes:
1.        If the text is longer than the column you must report an error – don't try and break it into two lines!
2.        Assume that the lines of text will have more than one word in them.
3.        Assume that all gaps are always typed in with only one space.
4.        Do not store the justified strings.  Simply display one character at a time in the justified format.
5.        Note the header line consisting of 123456789012345678....  This is useful to check your result.
我自己写了一半, display 部分完全没有头绪。。。哪位大神能帮帮我!~
#include<stdio.h>
#include<string.h>
int readline(char sentence[1024]);
int countgaps(char sentence[1024],int length);
int length1;
int length2;
int gap1;
int gap2;
int main(){
    
    char sentence1[1024];
    char sentence2[1024];
    while(1){
        printf("Enter first line of text:");
        gets(sentence1);
        length1=readline(sentence1);
        if(length1!=-1){
            break;}
    }
    while(1){
        printf("Enter second line of text:");
        gets(sentence2);
        length2=readline(sentence2);
        if(length2!=-1){
            break;}
    }
    printf("%d,%d,",length1,length2);
    gap1=countgaps(sentence1,length1);
    gap2=countgaps(sentence2,length2);
    printf("%d,%d",gap1,gap2);
    
}

int readline( char sentence[1024]){
    int len;
    len=strlen(sentence);
    if(len>50){
        printf("Error! The text is longer than the column,");
        len=-1;
    } else{
        len=strlen(sentence);
        
    }
    return len;
}
int countgaps(char sentence[1024],int length){
    int gaps;
    int i;
    gaps=0;
    for(i=0;i<length;i++){
        if(sentence[i]==' '){
            gaps++;
        }
    }
    
    return gaps;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-4 09:51:25 | 显示全部楼层
哪里找的题目呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-4 10:43:11 | 显示全部楼层
我们编程课上的题目。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-4 10:58:30 | 显示全部楼层
题目翻译:如果你看一份报纸,你会发现,其内容是展开的,以适应列宽。写一个程序,读取两行文本,并调整该行的列宽度为50。你的程序应该包括三个功能:
- readline读取一行不超过50个字符的文本,并返回它的长度
- countgaps计数和返回一个文本行之间的间隙(空格)的个数
-display 实现结果显示
当你的程序运行时,屏幕应该看起来像这样:
输入第一行文字:Good morning how are you?
输入第二行文字: I’m good thanks, and how are you?
实现结果类似于下(应该是每个单词间插入空格使之到达50字符宽)
12345678901234567890123456789012345678901234567890
Good        morning       how       are       you?
I’m    good    thanks,    and    how    are   you?
调整过程通过计数字符串空格来实现。在上述例子中,两行中分别有4和6个间隙(空格)。然后每一个空格必须有一个相同的空间添加到它与任何留下的空间被分配一个每一个空格,直到他们用完。在第一行的例子中,如果第一个空格有8个空格,其他三个空格有7个空格。在第二行的例子中,前五个空格有4个空格,最后一个空格有3个空格。
注意:
1。如果文本过长(超过50字符),你必须报告一个错误,不要试图将其分为两行!
2。假设文本行中有一个以上的字。
三.假设所有输入的字符中 每个间隙都只输入一个空格。
4。Do not store the justified strings.  Simply display one character at a time in the justified format.
5。注意标题行由123456789012345678个……这是有用的检查你的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-9 08:29:36 | 显示全部楼层
int main()主函数里面没有返回值哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-11 10:49:53 | 显示全部楼层
本帖最后由 徐皖辉 于 2016-10-11 10:51 编辑
/*题意是猜想的,不一定对,我按照我对题意得理解做的题
*
*程序大概的意思是,你按照她的规格分别输入这两个行字符串
*然后程序返回每一行的字符长度,注意这里空格也包括在字符串中
*程序还要返回每行中每两个单词之间的空格数量
*(或者整个字符串之间的空隙数?这里题意表达的不是很清楚)
*最后就是将两行字符串打印出来,最上面的50个字符是测试你输入的两行字符串是否超出50个
*
*/

#include<iostream>
#include<string>

using namespace std;

int readLine(string);
int countGaps(string);
void displayText(string,string);

int main()
{
        string str1(50,0);
        string str2(50,0);


        cout << "Please input the first text: ";
        getline(cin, str1);
        readLine(str1);
        countGaps(str1);
        cout << "Please input the second text: ";
        getline(cin, str2);
        readLine(str2);
        countGaps(str2);

        displayText(str1, str2);

        return 0;
}


int readLine(string str)
{
        //str.size()这里计数的长度包括输入的空格
        int length;
        length = str.size();
        
        if (length > 50)
        {
                cout << "Error! The text is out of range" << endl;
                return -1;
        }
        
        //注意这里要将函数的值返回,供给其它函数使用
        return length;
}

int countGaps(string str)
{
        //获取输入的字符串的长度,包括空格的长度
        int length;
        length = readLine(str);

        //记录空格的数量
        int count = 0;

        for (int i = 0; i < length; ++i)
        {
                //判断当前字符是否为空格
                if (isspace(str[i]))
                {
                        ++count;
                }
        }

        return count;
}

void displayText(string str1,string str2)
{
        cout << endl;
        cout << "12345678901234567890123456789012345678901234567890" << endl;
        cout << str1 << "                        " << readLine(str1) <<"  "<< countGaps(str1) << endl;
        cout << str2 << "           " << readLine(str2) <<"  "<< countGaps(str2) << endl;
}

http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html
C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

程序输出结果

程序输出结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 13:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表