| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 817 人关注过本帖
标题:字符串综合题
只看楼主 加入收藏
fydgo
Rank: 2
等 级:论坛游民
帖 子:57
专家分:10
注 册:2009-4-10
结帖率:73.33%
收藏
已结贴  问题点数:10 回复次数:8 
字符串综合题
我是刚学的,学到字符串,做综合题时候遇到麻烦,请教高手。
程序要求读入一个最长100个字符的句子。对这个句子进行调试,输出间距正确,且首字母正确大写的结果。换言之,在输出句子中国,有两个或者更多空格构成的所有字符串都必须压缩成一个空格。句子以大写字母开头。但除此之外不能再有其他任何大写字母(专业名词也是)。将换行符视为一个空格,您需要将任意数量的换行符压缩成单独一个空格。假定句子以一个句点符号结尾,而且句子中没有其他句点。列入
the  Answer to life,  the Universe,  and   everything
IS 42
所生成的输出是
The answer to life,the universe,and everything is 42.
这题对我来说有几个难点,怎么把多个空格压缩成一个空格&&怎么检查第一个以外都是小写字母。
请高手指点,谢谢
搜索更多相关主题的帖子: 字符 
2009-12-23 11:08
fydgo
Rank: 2
等 级:论坛游民
帖 子:57
专家分:10
注 册:2009-4-10
收藏
得分:0 
#include <iostream>
#include <cstring>
#include <cctype>

main()
{
    using namespace std;
    char string[25];
    char string1[15];
    char string2[10];
    int i,j;
    cout<<"enter first string";
    cin.getline(string1,15);
    cout<<"enter second string";
    cin.getline(string2,10);
    string[0]=toupper(string1[0]);                    //第一个大写字母赋给string//
    for(j=i=1;string1[i]!='\0';)
    {
        if(isalpha(string1[i]))
        {
            string[j]=tolower(string1[i]);            //把字母赋给//
            i++;j++;
        }
        else
        if(isdigit(string1[i]))                        //把数字赋给//
        {
            string[j]=string1[i];
            i++;j++;
        }
        else
        if(string1[i]==' ')                            //把空格赋给//
        {
            {
            
                string[j]=string1[i];
                i++;j++;
            }
            while(string1[i]==' ')                    //如果是连续的空格就继续,直到不是空格位置//
            {
            i++;
            }
        }
    }

    string[j]=' ';
    j++;
    for(i++,j=0;string2[j]!='\n';)
    {
        if(isalpha(string2[i]))
        {
            string[j]=tolower(string2[i]);
            i++;j++;
        }
        else
        if(isdigit(string2[i]))
        {
            string[j]=string2[i];
            i++;j++;
        }
        else
        if(string1[i]==' ')
        {
            {
            
                string[j]=string2[i];
                i++;j++;
            }
            while(string1[i]==' ')   
            {
            i++;
            }
        }
    }

    string[j]='\0';
    for(j=0;string[j]!='\0';j++)
    cout<<string;
}
这是我刚自己写的但不行啊,高手帮忙
2009-12-23 14:06
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:0 
1.多个空格
 int blankCount = 0;
 在你的循环里
程序代码:
 if (' '==ch)
{
if (blankCount)
    continue;
else
    {
      //输出空格
     }
blankCount++;
}
碰到不是的就清零
2.小写字母
ch > '`'
大写字母
ch<'['
懂了吗


[ 本帖最后由 秀痘魔导士 于 2009-12-23 14:11 编辑 ]
2009-12-23 14:07
fydgo
Rank: 2
等 级:论坛游民
帖 子:57
专家分:10
注 册:2009-4-10
收藏
得分:0 
不懂啊? 能具体点吗?
2009-12-23 14:32
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:10 
第一个问题,blankCount用来计数遇到的空格,如果不是空格就清零,是的话先判断是不是非0,如果是0,说明之前一个字符不是空格,那么就不要输出空格,变量+1,如果是0,输出空格。

第二个问题,知道ASCII码吗,用它来确定是大写还是小写,详细地,参考ASCII码表

http://www.

char ch;
if (ch > '`'&&ch<'{')
{
//小写字母
}

就像这样
2009-12-23 14:37
guchao2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:101
专家分:106
注 册:2009-4-13
收藏
得分:0 
/*
程序要求读入一个最长100个字符的句子。对这个句子进行调试,输出间距正确,且首字母正确大写的结果。换言之,在输出句子中国,有两个或者更多空格构成的所有字符串都必须压缩成一个空格。句子以大写字母开头。但除此之外不能再有其他任何大写字母(专业名词也是)。将换行符视为一个空格,您需要将任意数量的换行符压缩成单独一个空格。假定句子以一个句点符号结尾,而且句子中没有其他句点。列入
the  Answer to life,  the Universe,  and   everything
IS 42
所生成的输出是
The answer to life,the universe,and everything is 42.
这题对我来说有几个难点,怎么把多个空格压缩成一个空格&&怎么检查第一个以外都是小写字母。
*/

#include<iostream>
#define maxsize 20

using namespace std;
void main()
{
    char string[maxsize];
    int i,j;
    cout<<"请您输入一个最长20个字符的句子:"<<endl;
    for(i=0;i<maxsize;i++)
        cin>>string[i];
    for(i=1;i<maxsize;i++)
    {
        if(string[0]>=97||string[0]>=122)
            string[0]=string[0]-32;
        else if(string[i]>=65||string[i]<=90)
            string[i]=string[i]+32;
        else
        {
            if(string[i]==' '||string[i]!=',')
            {
                for(j=i+1;j<maxsize;j++)
                {
                    if(string[j]==' ')
                        string[j]=string[j+1];
                }
            }
        }
    }
    cout<<"输出修改后的字符句子:"<<endl;
    for(i=0;i<maxsize;i++)
        cout<<string[i];
    cout<<endl;
}

 

我写了下 但是不行·1·····················
2009-12-27 13:12
wfghw
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-3-7
收藏
得分:0 
undefined
2010-03-07 21:03
wfghw
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-3-7
收藏
得分:0 
undefined
2010-03-07 21:03
wfghw
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-3-7
收藏
得分:0 
字符串综合题 解答
undefined
2010-03-07 21:06
快速回复:字符串综合题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031380 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved