关于处理字符串

对于一个字符串,已知全为大写字母,或者是小写字母,可以将其输入的值,每个减去对应的大(小)写的字母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(*****)这种,因为感觉很装逼=。=

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

看来还是太年轻了=。=

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

时间: 2024-12-23 03:22:35

关于处理字符串的相关文章

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

sql常用格式化函数及字符串函数

一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') //2017-09-18 22:41:50 YYYY:年(4和更多位) MM:月份号(01-12) DD:一个月里的日(01-31) HH24:一天的小时数(00-23) MI:分钟(00-59) SS:秒(00-59) 2.字符串转日期 select to_date('2017-09-18','YYYY-MM-DD') //2017-09-

PHP 格式化字符串sprintf()

字符串函数 sprintf() 函数把格式化的字符串写入一个变量中 函数说明:sprintf(格式, 要转换的字符串)  参考PHP手册 返回: 格式化后的字符串 举例: 如:保留2位小数, $str = '99.9';echo sprintf('%01.2f', $str);结果为:99.90 echo round($str, 2); 结果为:99.9

js中字符串的替换

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp/substr,replacement)参数 描述 regexp/substr 必需.规定子字符串或要替换的模式的 RegExp 对象. 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 返

数组、字符串、集合

数组与集合的转换.数组与字符串的转换 ========数组变集合 String[] arr = {"abc","cc","kkkk"}; //把数组变成list集合有什么好处? /* 可以使用集合的思想和方法来操作数组中的元素. 注意:将数组变成集合,不可以使用集合的增删方法. 因为数组的长度是固定. contains. get indexOf() subList(); 如果你增删.那么会产生UnsupportedOperationExcepti

《Java编程思想》第十三章 字符串

<Java编程思想>读书笔记 1.String作为方法的参数时,会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置,从未动过. 2.显式地创建StringBuilder允许预先为他指定大小.如果知道字符串多长,可以预先指定StringBuilder的大小避免多次重新分配的冲突. 1 /** 2 * @author zlz099: 3 * @version 创建时间:2017年9月1日 下午4:03:59 4 */ 5 public class UsingStringBuilder {

SpringMVC后台使用对象接受参数字符串转日期

在springMVC配置文件中加入: <bean id="dateConvert" class="com.iomp.util.DateConvert"/> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property

python判断字符串,str函数isdigit、isdecimal、isnumeric的区别

s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() 所有字符都是大写s.istitle() 所有单词都是首字母大写,像标题s.isspace() 所有字符都是空白字符.\t.\n.\r 判断是整数还是浮点数a=123b=123.123 >>>isinstance(a,int)True>>>isinstance(b,floa

【自动化__持续集成】___java___字符串转数组

一.代码如下 package www.wujianbotwo; public class Demo08 { public static void main(String[] args) { // TODO Auto-generated method stub String content= "wujianbo,wujianob,33333"; String[] ud= content.split(",");//将字符串分段成一个数组 for(int i=0; i&l

字符串的模式匹配中的算法

字符串的模式匹配是一个比较经典的问题:假设有一个字符串S,称其为主串,然后还有一个字符串T,称其为子串. 现在要做的是,从主串S当中查找子串T的位置,如果存在返回位置值,如果不存在返回-1.另外主串又称为目标串, 子串称为模式串. 暴力匹配算法 这是一个经典的串匹配问题,涉及的算法也比较多,先讨论第一种简单的暴力算法,思路如下 将主串S的第pos个字符 与 子串T的第一个字符比较, 若相同,继续比较子串和主串后面的字符. 若不相同,那么从主串S的第(pos + 1)个字符开始继续向后匹配,直到匹