码迷,mamicode.com
首页 > 其他好文 > 详细

关于处理字符串

时间:2017-03-12 20:58:04      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:任务   一点   ==   height   src   mod   没有   lock   abs   

对于一个字符串,已知全为大写字母,或者是小写字母,可以将其输入的值,每个减去对应的大(小)写的字母A(a)对应的ASCII码值,然而今天一天很迷这个ASCII码的减加。

总结一下有以下几个思路

一、用while语句,条件是getchar() != ‘\n‘

二、用scanf("%s",a)直接解,然而现阶段对应的问题是,如果在做%s之后,a的值是一大串字母对应的ASCII码表,而非我们所需要的单个的字母的ASCII码。

比较有趣的是这个CODEVS上的1508你的飞碟在这 这个题。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    char h[5],u[5];
    int a , b;
    long long hans=1,uans=1;
    scanf("%s%s",h,u);
    for(a = 0 ; a < strlen(h) ;a++)
    {
        h[a] -= 64;
        hans *= h[a];
    }
    for( a = 0 ; a < strlen(u) ; a ++)
    {
        u[a] -= 64;
        uans *= u[a];
    }
    
    if((uans%47)==(hans%47))
        cout<<"GO";
    else
        cout<<"STAY";

}
技术分享
题目描述 Description
  众所周知,在每一个彗星后都有一只UFO。这些UFO时常来收集地球上的忠诚支持者。不幸的是,他们的飞碟每次出行都只能带上一组支持者。因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走。他们为每个彗星起了一个名字,通过这些名字来决定这个小组是不是被带走的那个特定的小组(你认为是谁给这些彗星取的名字呢?)。关于如何搭配的细节会在下面告诉你;你的任务是写一个程序,通过小组名和彗星名来决定这个小组是否能被那颗彗星后面的UFO带走。

  小组名和彗星名都以下列方式转换成一个数字:最终的数字就是名字中所有字母的积,其中“A”是1,“Z”是26。例如,“USACO”小组就是21*19*1*3*15=17955。如果小组的数字 mod 47等于彗星的数字mod 47,你就得告诉这个小组需要准备好被带走!(记住“a mod b”是a除以b的余数;34 mod 10等于4)

  写出一个程序,读入彗星名和小组名并算出用上面的方案能否将两个名字搭配起来,如果能搭配,就输出“GO”,否则输出“STAY”。小组名和彗星名均是没有空格或标点的一串大写字母(不超过6个字母)。

输入描述 Input Description
第1行:一个长度为1到6的大写字母串,表示彗星的名字。

第2行:一个长度为1到6的大写字母串,表示队伍的名字。

输出描述 Output Description
仅一行,包括“GO”或“STAY”。

样例输入 Sample Input
【样例输入1】

COMETQ

HVNGAT

【样例输入2】

ABSTAR

USACO

样例输出 Sample Output
【样例输出1】

GO

【样例输出2】

STAY
题目

第一个代码是网上搜的题解,很有趣的事是样例中有一组

COMETQ

HVNGAT

对应的输出值应该是GO

然而并不是,但是由于测试点中没有这个样例,所以很棒的A了

那随笔开头写的,对于处理字符串,就是用这种

scanf("%s%s",h,u);
    for(a = 0 ; a < strlen(h) ;a++)
    {
        h[a] -= 64;
        hans *= h[a];
    }

已知题目输出的全为大写字母,要求A对应的值为1,故减去64即可

于是发奋图强,自己写了一遍,对于这个题解有些地方不是很喜欢,首先就是开始的用了C++的头文件,用了iostream,用了using namespace std 还是scanf输入,对于我这种对C++一窍不通的人简直尬爆了。(结果输出的是cout。。。。。)

其次是在最后,在之前讲快速乘法的时候,讲过取模运算,是的就是某个女装爱好者讲的,在这里题解是将( uans-hans ) % 47 ==0 通过这个来判断GO还是STAY,然而我将其改成了(uans%47)==(hans%47)莫名喜欢这种格式,自己写的就是直接在之前加了一个int q , int p ;q = uans % 47 ; p = hans % 47 ;虽然在快速乘法快速幂要取模的时候对代码的内存要求极其苛刻,然而这个只是一道很简单的题,所以就觉得还是写清楚一点好。

下面是自己的代码

 1 #include<stdio.h>
 2 #include<string.h>
 3 char ch[10000] , c[11000];
 4 int a[1200];
 5 int main()
 6 {
 7     long long chsum = 1 , csum = 1 ;
 8     scanf("%s%s",ch,c);
 9     for(int i = 0 ; i < strlen(ch); i ++)
10         {
11             ch[i] -= 64 ;
12             chsum *= ch[i];
13         }
14     for(int k = 0 ;k < strlen(c) ; k ++)
15         {
16             c[k] -= 64 ;
17             csum *= c[k];
18         }
19     int q = chsum % 47 ;
20     int p = csum % 47 ;
21     if(q == p)
22         printf("GO");
23     else printf("STAY");
24     return 0 ;
25 }    

第8行这个两个%s是开始没有想到的,忘记了是两个,以及最近特别喜欢设置变量监视,例如设置一个flag,if(flag) printf(*****)这种,因为感觉很装逼=。=

可能今天会再看一会再回家吧,那就等会再打卡,以及今天讲了函数,子程序的问题,但是题里却没有几个需要子程序=。=

看来还是太年轻了=。=

 

那是我愿意付诸一生的人,现在却没法拥有。

关于处理字符串

标签:任务   一点   ==   height   src   mod   没有   lock   abs   

原文地址:http://www.cnblogs.com/wahahaljy/p/6539001.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!