字符串问题1

合集下载

python 字符串题

python 字符串题

以下是一个Python 字符串的题目:
题目:将一个字符串中的所有字符按照其出现次数进行排序,并返回排序后的字符串。

示例:
输入: "abcaabb"
输出: "abc"
实现思路:
1.遍历字符串,统计每个字符的出现次数。

2.将字符和出现次数作为键值对存储在字典中。

3.按照字符的出现次数对字典进行排序。

4.根据排序后的字典顺序重新构建字符串。

下面是Python 代码实现:
python复制代码
def sort_string(s):
# 统计每个字符的出现次数并存储在字典中
char_count = {}
for char in s:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
# 按照字符的出现次数对字典进行排序
sorted_chars = sorted(char_count.items(), key=lambda x: x[1])
# 根据排序后的字典顺序重新构建字符串
sorted_string = ""
for char, count in sorted_chars:
sorted_string += char * count
return sorted_string
示例输出:
python复制代码
print(sort_string("abcaabb")) # 输出 "abc"。

1 1的复杂解法

1 1的复杂解法

1 1的复杂解法算法是解决问题的重要工具,它可以用来把一个大型问题分解成若干个小问题,并研究这些小问题的解决方案来解决整个问题。

算法的应用之一就是解决一个叫做 1 1问题。

这个问题源自一个神秘的数学家 MacMahon造的定义,这个定义说明,如果把一个数组中的所有元素排列成一个单独的字符串,就形成了一个 1 1序列。

1 1问题是,如何从一个长度为 N单独的字符串中,找出所有的1 1列,并给出它们的次序。

例如,如果N=6,单独的字符串为PAYPAL,那么它的 1 1列有:{P, A, A, Y, L, P},{P, A, Y, P, A, L},{P, Y, P, A, A, L} {A, P, A, Y, P, L},它们的次序分别为1,2,3,4。

要解决 1 1题,需要一个算法,也就是一个组合算法。

组合算法是一种对字符串进行深度搜索的算法,它可以从字符串中找出所有可能的 1 1列。

在组合算法中,每一步都是选择一个字符作为起点,然后从这个字符开始根据题意搜索所有可能的解,这里有两种可能:一是从该字符开始,搜索 1 1所有可能组合;另一种是从该字符开始,继续搜索其他的字符,对其 1 1可能组合进行搜索。

两种方法通过一系列的子问题及其解决方案相结合,最终能够得出组合算法的解决方案。

在组合算法的应用中,常见的是用回溯法来求解 1 1题。

回溯法首先将字符串看作一颗多叉树,然后,让目标字符串从根节点开始进行深度优先搜索,搜索到叶子节点时,就确定了一个 1 1序列,以此类推,最终就能得到总的 1 1列。

另一种常见的 1 1法是构建有向图的方法,这种方法可以利用有向图的性质,快速地查找所有 1 1列。

这里,每个字符串中的元素都会被抽象成一个节点,而每个序列中相邻的字符就会被看作是有向图中的边。

有了这种模型后,我们可以利用有向图的性质,快速地搜索出所有 1 1列,这样就可以节约很多搜索时间。

总之,1 1问题有着复杂多变的解决方案,其中最常见的解法有组合算法和构建有向图的方法,这两种方法都能够快速地查找出所有的 1 1列,从而达到最优的解法效果。

在一个字符串中,统计大写字母个数,小写字母个数,其他字符个数的四种算法

在一个字符串中,统计大写字母个数,小写字母个数,其他字符个数的四种算法

在⼀个字符串中,统计⼤写字母个数,⼩写字母个数,其他字符个数的四种算法题⽬描述:编写程序,输出字符串中的⼤写字母、⼩写⼩母和其他的个数。

如有⼀个字符串"Helle, This is A test textfile.123456, tannkyou!!",则其⼤写字母个数:3,⼩写字母个数:29,其他字符个数:18.这⾥提供了四种算法,第⼀种是我们⽐较好理解的,也属于硬编码问题,其他三种⽅法要借助JAVA语⾔的jdk提供的api。

⽅法⼀:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>js分析字符串内容</title><!--实现⼀个函数,输出某字符串⾥有⼏个⼤写字母,⼩写字母,数字,其他符号。

字符串由形参指定 --><script>var str = prompt("请随意输⼊⼤写字母⼩写字母数字及符号等");function analyze(aa){var a = 0;var A = 0;var n = 0;var other = 0;for (var i=0;i<aa.length;i++){var c = aa.substr(i,1); //aa.charAt(i);if (c>='a' && c<='z'){a++;}else if(c>='A' && c<='Z'){A++;}else if(c>='0' && c<='9'){n++;}else{other++;}}document.write("⼩写字母为"+a,"⼤写字母为"+A,"数字为"+n,"其他字符为"+other);}</script></head><body onload="analyze(str)"></body></html>[java]1. //⽅法⼀:在利⽤每个字符的Unicode码在a~z之间,调⽤jdk提2. //供的String类的charAt取出字符串每⼀个字符,逐个进⾏⽐较来判定3.4. class FindLetter {5. public static void main(String[] args) {6. String str = "Helle, This is A test textfile.123456, tannk you!!";7. int upCount = 0;8. int lowCount = 0;9. int otherCount = 0;10.11. for(int i = 0; i < str.length(); i++) {12. char c = str.charAt(i);13. if(c >= 'a' && c <= 'z') {14. lowCount++;15. } else if(c >= 'A' && c <= 'Z') {16. upCount++;17. } else {18. otherCount++;19. }⽅法⼆:[java]1. //⽅法⼆:⽤jdk的Character类的isUpperCase⽅法和isLowerCase⽅法2.3. class FindLetter1 {4. public static void main(String[] args) {5. String str = "Helle, This is A test textfile.123456, tannk you!!";6. int upCount = 0;7. int lowCount = 0;8. int otherCount = 0;9.10. for(int i = 0; i < str.length(); i++) {11. char c = str.charAt(i);12. if(Character.isUpperCase(c)) {13. upCount++;14. } else if(Character.isLowerCase(c)) {15. lowCount++;16. } else {17. otherCount++;18. }19. }20. System.out.println("⼤写字母个数:" + upCount);21. System.out.println("⼩写字母个数:" + lowCount);22. System.out.println("其他字母个数:" + otherCount);23. }24. }⽅法三:[java]1. //⽅法三:先定义两个字符串a到z和A到Z,再逐个取出str字符串中的每个字母,2. //⽤indexOf()⽅法来判断字符是否在这这个定义的字符串中,在⼤写字母这⼀⾏,3. //⼤写字母的计数器就加1,在⼩写字母这⾏,⼩写字母就加⼀,否则其他字母计算器4. //加15.6. class FindLetter2 {7. public static void main(String[] args) {8. String low = "abcdefghijklmnopqrstuvwxyz";9. String up = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";10. int lowCount = 0;11. int upCount = 0;12. int otherCount = 0;13. String str = "Helle, This is A test textfile.123456, tannk you!!";14.15. for(int i = 0; i < str.length(); i++) {16. char c = str.charAt(i);17. if(low.indexOf(c) != -1) {18. lowCount++;19. } else if(up.indexOf(c) != -1) {20. upCount++;21. } else {22. otherCount++;23. }⽅法四:[java]1. //把str分别转化为⼤写和⼩写⼤写⽤sU ⼩写 sL2. //然后通过与原串⽐较来统计个数3.4. class FindLetter3 {5. public static void main(String[] args) {6. String str = "Helle, This is A test textfile.123456, tannk you!!";7. String sU = str.toUpperCase();8. String sL = str.toLowerCase();9. int lowCount = 0;10. int upCount = 0;11. int otherCount = 0;12. for(int i = 0; i < str.length(); i++) {13. char charSTR = str.charAt(i);14. char charSU = sU.charAt(i);15. char charSL = sL.charAt(i);16.17. //如果不是字母,是其他字符,则直接⽤otherCount来计数18. if(Character.isLetter(charSTR)) {19. //如果原串与转换过后的⼤写字母串相等,则原来字符为⼤写字母,20. //若与⼩写字母相等,则为⼩写字母21. if( charSTR == charSU) {22. upCount++;23. } else if(charSTR == charSL) {24. lowCount++;25. }26. } else {27. otherCount++;28. }29. }30.31. System.out.println("⼤写字母个数:" + upCount);32. System.out.println("⼩写字母个数:" + lowCount);33. System.out.println("其他字母个数:" + otherCount);34. }35. }这四种算法都有正确的输出:⼤写字母个数:3⼩写字母个数:29其他字母个数:18。

从键盘输入一个字符串,将其中的大写字母变小写字母,小写字母变大写字母,并输出。

从键盘输入一个字符串,将其中的大写字母变小写字母,小写字母变大写字母,并输出。

从键盘输⼊⼀个字符串,将其中的⼤写字母变⼩写字母,⼩写字母变⼤写字母,并输出。

/*2、编程题1) 从键盘输⼊⼀个字符串,将其中的⼤写字母变⼩写字母,⼩写字母变⼤写字母,并输出。

【要求】(1)⽤字符数组表⽰存储字符串(字符串最⼤为100)。

(2)使⽤scanf函数逐个输⼊字符保存在字符数组中(3)使⽤printf函数逐个输出字符数组中的字符*/题⽬很简单,但是要求⽤scanf函数逐个输⼊字符保存在字符数组中,对于新⼿有⼀些难度。

#include<stdio.h>void main(){int i=0;char a[100],c;printf("请输⼊字符串的内容:\t");do{scanf("%c",&a[i]);c=a[i];i++;}while(c!='\n');a[i]='\0';i=0;printf("输⼊字符串的内容为:\t");while(a[i]!='\0'){printf("%c",a[i]);i++;}printf("转换后字符串的内容为:\t");i=0;while(a[i]!='\0'){c=a[i];if(c>='a' && c<='z')a[i]-=32;else if(c>='A' && c<='Z')a[i]+=32;printf("%c",a[i]);i++;}}。

数据结构算法设计笔试面试题1

数据结构算法设计笔试面试题1

【字符串】1、输入一个字符串,打印出该字符串中字符的所有排列。

例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

2、有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法。

c语言函数原型void proc(char *str),也可以采用你自己熟悉的语言。

3、编写反转字符串的程序,要求优化速度、优化空间。

4、用C语言实现函数void * memmove(void *dest, const void *src, size_t n)。

memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。

分析:由于可以把任何类型的指针赋给void类型的指针,这个函数主要是实现各种数据类型的拷贝。

5、编程找出两个字符串中最大公共子字符串,如"abccade", "dgcadde"的最大子串为"cad"。

6、输入一个字符串,输出该字符串中对称的子字符串的最大长度。

比如输入字符串"google",由于该字符串里最长的对称子字符串是"goog",因此输出4。

7、字符串原地压缩。

题目描述:“eeeeeaaaff" 压缩为"e5a3f2",请编程实现。

8、请以回溯与不回溯算法实现字符串匹配。

9、输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。

句子中单词以空格符隔开。

为简单起见,标点符号和普通字母一样处理。

例如:输入"I am a student.",则输出"student. a am I"。

10、在一个字符串中找到第一个只出现一次的字符。

如输入abaccdeff,则输出b。

C例题 (1)

C例题 (1)
如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。
#include<stdio.h>
#include<string.h>
int main()
{
int c,s[26],i,max;
char str[1000];
scanf("%d",&c);
return 0;
}
***************************************************************************述
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别. 我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符 串.
{
s[j]=s[j]+1;
}
else if(s[j]>96&&s[j]<122)
{
s[j]=s[j]+1;
}
while(c>0)
{
scanf("%s",str);
for(i=0;i<26;i++)
{
s[i]=0;
}
for(i=0;i<strlen(str);i++)
{
输入要求
第一行是字符串的数目n.
其余n行每行一个字符串,用gets(s)方式读取这一行字符串.每个字符串长度小于80个字符.

1_金策_字符串算法选讲

1_金策_字符串算法选讲
字符串算法选讲
. .
字符串算法选讲
金策
清华大学交叉信息研究院
February 3, 2017
字符串算法选讲 Periods and borders Basics
字符串: s[1..n], |s| = n。 字符集: s[i] ∈ Σ。算法竞赛中常见的 Σ 是 26 个小写英文字 母。 子串 s[i..j ] = s[i]s[i + 1] · · · s[j ]。 前缀 pre(s, x) = s[1..x], 后缀 suf(s, x) = s[n − x + 1..n]。
求出 pre(t, 2i−1 ) 在 suf(t, 2i ) 中匹配的所有位置, 以及 suf(t, 2i−1 ) 在 pre(t, 2i ) 中匹配的所有位置。移位后取交集即可。
字符串算法选讲 Periods and borders Factor periodicity problem
Internal Pattern Matching (IPM) Queries (Easy)
字符串算法选讲 Periods and bop ≤ |s|, s[i] = s[i + p], ∀i ∈ {1, · · · , |s| − p}, 就称 p 是 s 的周期 (period)。 若 0 ≤ r < |s|, pre(s, r) = suf(s, r), 就称 pre(s, r) 是 s 的 border。 pre(s, r) 是 s 的 border ⇔ |s| − r 是 s 的周期。 u . border 比如 abaaaba 就有周期 4, 6, 7, 对应的 border 是 aba,a, 和 ϵ。 period
字符串算法选讲 Periods and borders Factor periodicity problem

例1由键盘输入一字符串,求其长度(要求自己编程,不用strlen函数) #...

例1由键盘输入一字符串,求其长度(要求自己编程,不用strlen函数) #...

例14:输入一行字符,统计其中有多少个单词,单词之间 :输入一行字符,统计其中有多少个单词, 用空格分开。 用空格分开。
Байду номын сангаас
#include “stdio.h” main() { char string[80],c; int I,num=0,word=0; gets(string); for(I=0;(c=string[I])!=’\0’;I++) if(c== ‘ ’) word=0; else if(word==0) {word=1; num++; } printf(“ 这行字符有单词 %d个\n”,num);} 个
上一页 下一页
的根, 例12:求方程 :求方程ax2+bx+c=0的根,要求用三个函 的根 数分别求当b2-4ac大于 、等于 和小于 时的根, 大于0、等于0和小于 时的根, 和小于0 数分别求当 大于 并输出结果,从主函数输入a,b,c的值。 并输出结果,从主函数输入 的值。 的值 #include"math.h" float dy0(float a,float b,float d) {float x1,x2; x1=(-b-sqrt(d))/(2*a); x2=(-b+sqrt(d))/(2*a); printf("%f,%f",x1,x2); }
上一页 下一页
例10:编写一个求字符串长度的程序,要求在主函数输 :编写一个求字符串长度的程序, 入一字符串,在了函数求它的长度, 入一字符串,在了函数求它的长度,并输出结果 #include"stdio.h" cd(char str[]) {int i; for(i=0;str[i]!='\0';i++) ; printf("string lenght=%d",i); } main() {char s1[100]; gets(s1); cd(s1); }

正则表达式偶数个0和奇数个1的字符串

正则表达式偶数个0和奇数个1的字符串

【正则表达式:探寻偶数个0和奇数个1的字符串】1. 概述在计算机科学和信息技术领域,正则表达式是一种强大的工具,用于匹配和处理文本。

其中,对于偶数个0和奇数个1的字符串,是一个经典的正则表达式应用场景。

本文将从简单到复杂地探讨这一主题,为您带来深入的理解和实用的知识。

2. 什么是正则表达式正则表达式是一种用来描述、匹配和操作字符串的技术。

它可以帮助我们在文本中快速地定位和提取特定模式的内容,比如数字、字母、符号等。

在这里,我们将使用正则表达式来匹配偶数个0和奇数个1的字符串。

3. 偶数个0和奇数个1的字符串是什么偶数个0和奇数个1的字符串,指的是由0和1组成的字符串,其中0的个数是偶数,1的个数是奇数。

101、1101、1001都符合这个规律,而11、100、111则不符合。

4. 用正则表达式匹配偶数个0和奇数个1的字符串在正则表达式中,我们可以使用一些特殊的符号来描述和匹配字符串的模式。

对于偶数个0和奇数个1的字符串,可以使用以下正则表达式来匹配:^(10)*1$这个表达式的含义是从开头开始,匹配任意个“10”,然后以“1”结尾。

这样就可以确保匹配的字符串中0的个数是偶数,1的个数是奇数。

5. 举例说明让我们通过一些具体的例子来说明这个正则表达式的匹配情况:- 对于字符串“101”,匹配成功,其中0的个数是0,1的个数是1;- 对于字符串“1101”,匹配成功,其中0的个数是1,1的个数是1;- 对于字符串“1001”,匹配成功,其中0的个数是2,1的个数是2;- 对于字符串“11”,匹配失败,其中1的个数是2;- 对于字符串“100”,匹配失败,其中0的个数是2。

6. 总结与回顾通过本文的探讨,我们了解了正则表达式的基本概念,以及如何使用正则表达式匹配偶数个0和奇数个1的字符串。

这项技能在文本处理和编程中都是非常有用的,希望读者可以通过实际练习加深理解。

7. 个人观点和理解对于正则表达式的应用,我个人认为是非常重要的。

字符数组习题(1)

字符数组习题(1)

字符数组习题(1)字符数组习题1.s12和s2已正确定义并分别指向两个字符串。

若要求:当s1所指串⼤于s2所指串时,执⾏语句S;则以下选项中正确的是_____A)if(s1>s2)S; B)if(strcmp(s1,s2))S;C)if(strcmp(s2,s1)>0)S; D)if(strcmp(s1,s2)>0)S;2.以下定义语句中,错误的是________。

A) int a[]={1,2}; B) char a[]={"test"};C) char s[10]={"test"}; D) int n=5,a[n];3、当接受⽤户输⼊的含有空格的字符串时,应使⽤______函数。

A) gets( ) B) getchar( ) C) scanf( ) D) printf( )4、设有数组定义:char array[]="China";则strlen(array)的值为______ 。

A) 4 B) 5 C) 6 D) 75、设有数组定义:char array[]="China";则数组array所占的存储空间为________。

A) 4个字节B) 5个字节C) 6个字节D) 7个字节6、设有数组定义:char array[10]= "China";则数组array所占的存储空间为__ _____。

A) 4个字节B) 5个字节C) 6个字节D) 10个字节7.有如下程序main(){ char ch[80];int j;long s=0;printf("Enter a numeral string\n"); gets(ch);for(j=0;ch[j]>'\0';j++)s=10*s+ch[j]-'0';printf("%ld\n",s);}如果运⾏时,从键盘上输⼊由数字组成的字符串,该程序的功能是______。

字符串hash以及7大问题(1)

字符串hash以及7大问题(1)
• 这样子,我们就可以记录下每个字符串对应 的整数,当下一次出现了一个已经出现的字 符串时,查询整数是否出现过,就可以知道 字符串是否重复出现。 • 现在要判断两个字符串是否一致,怎么办呢 ?直接用它们的hash值判断即可,若hash值 一致,则认为字符串一致; 若hash值不一致,则认为是不同的字符串。
15
p和mod的取法
• 我们一般认为p和mod一般取素数,p取一个 较大的素数即可(6位到8位),mod取一个 大素数,比如1e9+7,或者1e9+9。 • 具体为什么这样做就能够大概率地避免冲突 ,或者它具体的概率是多少,若想钻研,请 google • 但,可以肯定的是,这样子的取法,冲突的 概率非常低!低到我们可以基本放心地去用 这个函数解决一般的hash问题。
8
关于hash的简单问题
• 问题: • 给N个字符串,每个字符串长度不超过100, 问这些字符串里有多少个不同的字符串? • 即相同字符串只取一个,最后剩下多少字符 串? • 数据范围:1=<N<=100000 • 字符集:小写英文字母(ut • 第一行输入一个整数N • 接下来N行输入N个字符串,每个字符串长 度不超过100 • Output • 输出一个整数,表示有多少个不同的串。
7
hash
• 我们要判断两个字符串是否一致,没有那么 麻烦,直接先判断长度是否一致,然后再判 断每个对应的字符是否一致即可。 • 但,如果要判断多个字符串里有多少个不同 的字符串,怎么办呢? • 两两字符串都进行比较?时间复杂度太高 • 把每个字符串hash成一个整数,然后把所有 整数进行一个去重操作,即可知道答案了。 • 我们来具体看下这个问题。
13
字符串hash
• 解决的方法非常简单,想办法调整p和mod, 使得冲突概率减小之又小。 • 那么怎么调整才能使冲突概率小之又小呢? • 一句话告诉你,p取一个较大素数,mod取一 个大素数。 • 习惯上,p取一个6到8位的素数即可,mod一 般取大素数 1e9+7(1000000007)或 1e9+9(1000000009) 可是,为什么这样做就会冲突概率小之又小?

集合覆盖问题

集合覆盖问题

组合优化 ——集合覆盖问题摘要:不仅介绍了特殊地集合覆盖问题的贪婪算法和证明了该算法的多项式时间的近似比,而且介绍了一般地集合覆盖问题的贪婪算法和该算法的近似比。

然后,将集合覆盖应用到最短超字符串问题,并将该问题进行了推广。

关键词:集合覆盖、贪婪算法、最短超字符串问题 正文:问题1(特殊地集合覆盖):令U 为一有限集,由U 的子集构成的集族}S ,,S ,{S S k 21=,求S 的所含集合数目最少的子集族,他能覆盖U的所有元素。

定理1:贪婪算法1是集合覆盖问题的多项式时间)ln 1(γ+-近似算法。

其中γ表示S中所含元素数目最多的集合的势。

证明:令g S S S ,,,21 为贪婪算法按顺序挑选出来的集合。

令ij j i S C 1==,令OPT 表示为最小集合覆盖问题的最优解。

由贪婪准则,1+i S 是在所有剩余集合(除i S S S ,,,21 集合外)中能够最多覆盖未被i C 覆盖元素的集合。

未被i C 覆盖的元素数目为||||i C U -,而这些未被覆盖的元素被最优解中的所有集合覆盖,因此,最优解中平均每个集合可覆盖OPTC U i ||||-个未被覆盖的元素。

因此,OPTC U C C i i i ||||||||1-≥-+ 即,11)11(||)11|)(||(|||||++-≤--≤-i i i OPTU OPT C U C U 又因为,0,1≥≤--x e x x 则,O PT i i e S C U /)1(1||||||+-+≤-选择i 使得||||||||1i i C U OPT C U -≤<-+ 则有,OPT i g +≤, 且O PT i e U OPT /||-≤ 因此,)ln 1()||ln 1(γ+≤+≤OPT OPTU OPT g问题2(一般地集合覆盖):给定有n 个元素的全域U ,由U 的子集构成的集族}S ,,S ,{S S k 21 =,以及费用函数+→Q S c :,找S 的最小费用子集族,它能覆盖U 的所有元素。

python3练习题100道,孰能生巧,之前要想一个下午的内容,马上就有了答案

python3练习题100道,孰能生巧,之前要想一个下午的内容,马上就有了答案

python3练习题100道,孰能⽣巧,之前要想⼀个下午的内容,马上就有了答案第1章字符串练习题1.1交换已知a的值为“hello”,b的值为“world”,如何交换a和b的值?得到a的值为“world”,b的值为“hello”a="hello"b="world"#⽅式1a,b=b,aprint("a的值:"+a+"; b的值:"+b)#⽅式2a="hello"b="world"c=aa=bb=cprint("a的值:{}; b的值{}".format(a,b))1.2回⽂回⽂的定义:“回⽂”就是正读倒读都是⼀样的如奇数个“98789”,这个数字正读是“98789”倒读也是“98789”。

偶数个数字“3223”也是回⽂数。

字母“abcba”也是回⽂。

判断⼀个字符串是否是回⽂字符串,是打印True,不是打印False。

a=input("请输⼊⼀个字符串:")print(a)flag=Truefor i in range(len(a)//2):if a[i]!=a[-i-1]:flag=Falseprint("{}不是⼀个回⽂字符串;".format(a))breakif flag:print("{}是⼀个回⽂字符串;".format(a))1.3字符串切割已知⼀个字符串为“hello_world_huihui”,如何得到⼀个队列["hello","world","huihui"]a="hello_world_huihui"print(a.split("_"))1.4拼接字符串有个列表['hello', 'world', 'huihui'] 如何把列表⾥的字符串串联起来得到字符串"hello_world_huihuia=['hello', 'world', 'huihui']aa=""for i in a:aa+=iaa += "_"print(aa[:-1]) 1.5 替换字符把字符串s中的每个空格替换成"%20"输⼊:s="We are happy."s="We are happy."ss=s.replace(" ","%20")print(ss)1.6 九九乘法表打印99乘法表for i in range(1,10):for j in range(1,i+1):print("{}*{}={}".format(j,i,i*j),end=" ")print()1.7字符下标找出单词"welcome" 在字符串"Hello,welcome." 中出现的位置,找不到返回-1从下标0开始索引a="welcome"b="Hello,welcme.welcome.."n=0if a in b:for i in b:if i!=a[0]:n+=1else:end=len(a)+n# print(end)if a==b[n:end]: #[6:14]print("单词{} 在{}的第{}位出现;".format(a,b,n))breakn+=1else:print("单词{} 未在{}中出现;".format(a,b)) 1.8 统计字符出现的次数统计字符串"Hello,welcome to my world." 中字母w出现的次数统计单词my出现的次数a="Hello, welcome to my world."b='w'# ⽅式⼀:# if b in a:# # count=0# # for i in a:# # if i==b:# # count+=1# # print("{}在字符串{}中,出现了{}次;".format(b, a,count))# # else:# # print("{}未出现在字符串{}中;".format(b,a))# ⽅式⼆:#直接将m替换为my即可count=0 while True: if b in a: a=a.replace(b,'',1) count+=1 else: break print("{}在字符串{}中,出现了【{}】次;".format(b, a,count))1.9 统计每个字符出现的次数题⽬:输⼊⼀个字符串str,输出第m个只出现过n次的字符, 如在字符串gbgkkdehh中,找出第2个只出现1次的字符,输出结果:d # a="gbgkkdehh"a=input('请输⼊⼀个字符串:')m=3n=2b={}count=0for i in a:if i not in b.keys():b[i]=1else:b[i]+=1print(b)for i in b.keys():if count==m:print(i)break1.10 判断字符a含b判断字符串a="welcome to my world" 是否包含单词b="world",包含返回True,不包含返回False a="welcome to my world"b="world"if b in a:print("True")else:print("False")1.11 查找字符⾸次出现位置输出指定字符串A在字符串B中第⼀次出现的位置,如果B中不包含A,则输出-1从0开始计数A="hello"B="hi how are you hello world,hello yoyo !"A = "hello"B = "hi how are you hello world, hello yoyo !"n=0if A in B:b=B.replace(A,'=',1)print(b)for i in b:if i!='=':n+=1else:print("{}在字符串{}中第⼀次出现的位置是 {}".format(A,B,n))else:print(-1)1.12 查找字符串最后⼀次出现位置输出指定字符串A在字符串B中最后出现的位置,如果B中不包含A,则输出-1从0开始计数A="hello"B = "hi how are you hello world, hello yoyo !" A = "hello"B = "hi how are you hello world,hello yoyo !"n=0count=0print(len(B))while A in B:n=B.index(A)B=B.replace(A,'',1)count+=1# print(n)print(n+(count-1)*len(A))1.13判断奇数偶数 给定⼀个数a,判断⼀个数字是否为奇数或偶数a=int(input("请输⼊任意⼀个整数:"))# print(a,type(a))if a%2==0:print("偶数")else:print("奇数")1.14判断⼀个姓名是否姓王 输⼊⼀个姓名,判断是否姓王a="王五"b="⽼王"a="⽼王五"if a[0]=="王":print("{} 姓‘王’".format(a))else:print("{} 不姓'王'".format(a))1.15 判断是不是数字如何判断⼀个字符串是不是纯数字组成a="123456"b="yoyo123"#⽅式1import rea="123456"b=re.findall('\d',a)if len(a)==len(b):print("{} 是纯数字;".format(a))else:print("{} 不是纯数字;".format(a))#⽅式2a="12345c6"if a.isdigit():print("数字字符串")else:print("⾮数字字符串")1.16 字符串⼤⼩写转换将字符串 a="This is string example....wow!" 全部转成⼤写字符串 b="Welcome To My World"全部转成⼩写a="This is string example....wow!"print(a.upper())print(a.lower())1.17 字符串去掉⾸尾空格将字符串a=" welcome to my world "⾸尾空格去掉 a=" welcome to my world "print(a.strip())print('abcab'.strip('a'))1.18字符串去掉左边指定空格或字符将字符串a = " welcome to my world !"左边的空格去掉a = " welcome to my world ! "print(a.lstrip())1.19字符串去掉右边指定空格或字符将字符串a = " welcome to my world ! "右边的空格去掉a = " welcome to my world!"print(a.rstrip())print(a.rstrip("!"))1.20 去除字符串⾥⾯所有的空格将字符串a = " welcome to my world ! "⾥⾯的所有空格都去掉a = " welcome to my world ! "print(a.replace(' ',''))1.21字符串去重后排序s = "ajldjlajfdljfddd",去重并从⼩到⼤排序输出"adfjl"s = "ajldjlajfdljfddd"rs=[]for i in s:if i not in rs:rs.append(i)# rs=sorted(rs) #列表排序⽅式1rs.sort()s="".join(rs)print(rs,s)1.22字符串去重保留顺序s = "ajldjlajfdljfddd",去重保留原来的顺序,输出"ajldf"s = "ajldjlajfdljfddd"rs=""for i in s:if i not in rs:rs+=iprint(rs)1.23画菱形题⽬打印出如下图案(菱形):n=7for i in range(n//2+1):print(' '*(n//2-i)+'*'*(2*i+1))#3,1; 2,3; 1,5;;0,7;;for i in range(n//2-1,-1,-1):print(' '*(n//2-i)+'*'*(2*i+1))1.24 输⼊⼀个正整数,判断是⼏位数题⽬给⼀个不多于5位的正整数,要求:⼀、求它是⼏位数,⼆、逆序打印出各位数字。

数组字符串常见题目分析 (1)

数组字符串常见题目分析 (1)
• 限制条件可能是下标的限制,特别是二维数组中,可能某 一行的、某一列的、对角线的 • 限制条件可能是取值的限制
输入理想的程序,输出快乐的人生
求最大、最小值:谁坐主宾
• 按名字大小,名字最大的坐主宾。题目要求求 出主宾的名字。名字一律以拼音表示,含空格; 名字不会重复。 • Input:若干行,表示客人每个人的名字,名字 长度不超过30;客人总数不超过10。 • Output:主宾名字,末尾换行 • 输入处理: 文件读入若干行字符串 while(gets(s)!=NULL){ …. }
输入理想的程序,输出快乐的人生
求最大、最小值:第二价格竞拍
• • • • 解题思路 该问题是求最大值、次大值、最大值的下标 声明3个变量表示最大值、最大值下标、次大值 如何在一趟循环中求出最大值与次大值?
– 将第一个元素给最大值,将0给次大值 – 然后循环遍历剩余的n-1个元素 – 如果第i个比最大值还大,则将最大值赋给次大值, 第i个值赋给最大值,并把i赋给最大值下标 – 如果第i个比最大值小,比次大值大,则将第i个值赋 给次大值
输入理想的程序,输出快乐的人生
按某种要求输出字符串:镜像文字
• 解题思路
– 若干字符串怎么输入,没有个数啊,没有结束标志 啊?? – 若干字符是在后台文件中存着,需要用下列方式读取 while(gets(s)!=NULL){ …. } – 输入124,怎么输出12421。 • 12421可分为两部分,124 与 21 • 124可原样输出,21 则可以从倒数第2个字符逆序输 出
– m3的初始值可以是0
输入理想的程序,输出快乐的人生
求最大、最小值:精挑细选的钢管
int main(){ int a[50][3],m1,m2,m3,t,i,j; scanf("%d",&t); for(i=0;i<t;i++){ for(j=0;j<3;j++){ scanf("%d",&a[i][j]); } } m1=a[0][0]; for(i=0;i<t;i++){ if(a[i][0]>m1){ m1=a[i][0]; } } m2=2147483647;

1-2、1-3字符串、日期问题

1-2、1-3字符串、日期问题

1-2 字符串1-3日期问题1-2字符串问题1、设定一个有大小写字母的字符串,先将字符串中的大写字符输出,再将字符串中的小写字符输出。

class StringTest{public static void main(String[] args){String s="ABCdefGc";for(int i=0;i<s.length();i++){char c=s.charAt(i);if(c>='A'&&c<='Z')System.out.print(c);}System.out.println();for(int i=0;i<s.length();i++){char c=s.charAt(i);if(c>='a'&&c<='z')System.out.print(c);}System.out.println();}}2、设定5个字符串并只打印输出以字母"f"开头的串。

class StringTest{public static void main(String[] args){String[] s={"sw","fed","fecg","e","cgs"};for (int i=0;i<s.length ;i++ ){if(s[i].charAt(0)=='f'){System.out.println(s[i]);}}}}3、设定5个字符串并只打印那些以字母"nt"结尾的串。

class StringTest{public static void main(String[] args){String[] s={"nat","ant","ctb","gnt","asc"};for (int i=0;i<s.length ;i++ ){if(s[i].endsWith("nt")){System.out.println(s[i]);}}}}4、设定一个有大小写字母的字符串和一个查找字符,使用类String方法indexOf来判断在该字符串中该字符的出现次数。

1下面不正确的字符串常量是

1下面不正确的字符串常量是

1下面不正确的字符串常量是:( ).A、"U"B、'abc'C、"0"D、"12'12"2定义结构体的关键字是( )。

A、structB、typedefC、enumD、union3下列说法中错误的是( )。

A、如果在对数组进行初始化时,给定的数据元素个数比数组元素个数少时,多余的数组元素会被自动初始化为最后一个给定元素的值B、一个数组只允许存储同种类型的变量C、数组的名称其实是数组在内存中的首地址D、当数组名作为参数被传递给某个函数时,原数组中的元素的值可能被修改4判断char型变量cl是否为小写字母的正确表达式是()。

A、('a'>=cl)||('z'<=cl)B、'a'<=cl<='z'C、(cl>=a)&&(cl<=z)D、(cl>='a')&&(cl<='z')5判断char型变量cl是否为小写字母的正确表达式是()。

A、('a'>=cl)||('z'<=cl)B、'a'<=cl<='z'C、(cl>=a)&&(cl<=z)D、(cl>='a')&&(cl<='z')6以下程序的输出结果是 ( ).main( ){int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf("%d\n",*(p+2));}A、1B、3C、4D、27C语言源程序文件经过C编译程序编译连接之后生成一个后缀为( )的可执行文件A、.exeB、.basC、.objD、.c8应用缓冲文件系统对文件进行读写操作,打开文件的函数名为()。

NCT-Python编程三级-模拟卷1(含答案图文

NCT-Python编程三级-模拟卷1(含答案图文

NCT-Python编程三级-模拟卷1(含答案图文一、选择题1.已知字符串a="python",则a[1]的值为()A."p" B."py" C."Py" D."y"2.以下是猜数游戏的 Python程序,请你补全代码:请选择适当的代码填入程序①处。

()A.for B.print C.elif D.input3.在Python中,表达式a**3+b**3+c**3==100*a+10*b+c属于()A.算术表达式B.关系表达式C.逻辑表达式D.日期表达式4.关于Python语句P = –P,以下选项中描述正确的是()A.P和P的负数相等B.P和P的绝对值相等C.将P赋值为它的相反数D.P的值为05.小明想要通过编程来解决由昆明到景东锦屏耗时最短行程问题时,最核心的工作是()A.设计出解决问题的算法B.设计出解决问题的PPTC.编写出Python代码D.选择一种编程软件6.在Python中,实现多分支选择结构的较好方法是()。

A.if B.if-else C.if-elif-else D.if嵌套7.在python中,运行下列程序,正确的结果是()。

A.i=4 s=10 B.i=5 s=10 C.i=5 s=15 D.i=6 s=158.可以被计算机直接执行的语言是( ) , Python语言属于( )语言。

A.机器,高级B.高级,汇编C.高级,机器D.汇编,高级9.在Python中,下面程序段的输出结果是()x=9Print(“x=”,x+1)A.9 B.10 C.x=9 D.x= 1010.已知字符串变量x的值是“H”,字符“A”的ASCII值是65,则python表达式chr(ord(x)+2)的值是()A.‘I’B.‘J’C.73 D.7411.关于Python语言的特点,以下选项描述正确的是()A.Python语言不支持面向对象B.Python语言是解释型语言C.Python语言是编译型语言D.Python语言是非跨平台语言12.关于python程序设计语言,下列说法错误的是()A.python是一种面向对象的编程语言B.python代码只能在交互环境中运行C.python具有丰富和强大的库D.python是一种解释型的计算机程序设计高级语言13.下列关于算法说法不正确的是()A.算法独立于任何具体的语言,Python算法只能用Python语言来实现B.解决问题的过程就是实现算法的过程C.算法是程序设计的“灵魂”D.算法可以通过编程来实现14.12 Python语言语句块的标记是( )A.分号B.逗号C.缩进D./15.Python中print(66!=66)结果是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目3:函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX 中;请编制函数STROR(),其函数功能是:以行为单位把字符串中的所有小写字母O左边的字符串内容移到该串的右边存放,然后并把小写字母O删除,余下的字符串内容移到已处理字符串的左边存放.最后把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT.DAT中.例如:原文:You can create an index on any field.you have the correct record.结果: n any field.You can create an indexrd.yu have the crrect rec原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.-------------------类型:字符串(单词)的倒置和删除。

答案:void StrOR(void) /*标准答案*/{int I,j,k,index,strl;char ch;for(I=0;I<maxline;I++){strl=strlen(xx[I]);index=strl;for(j=0;j<strl;j++)if(xx[I][j]=='o'){for(k=j;k<strl-1;k++)xx[I][k]=xx[I][k+1];xx[I][strl-1]= ' ';index=j;}for(j=strl-1;j>=index;j--){ch=xx[I][strl-1];for(k=strl-1;k>0;k--)xx[I][k]=xx[I][k-1];xx[I][0]=ch;}}}或者:void StrOR(void){ int i;char a[80],*p;for(i=0;i<maxline;i++){ p=strchr(xx[i],'o');while(p){ memset(a,0,80);memcpy(a,xx[i],p-xx[i]);strcpy(xx[i],p+1);strcat(xx[i],a);p=strchr(xx[i],'o'); } }}或者:void StrOR(void) /*我的非指针解法*/{int i,righto,j,k;char tem[80];for(i=0;i<maxline;i++){k=0;righto=0;memset(tem,0,80);for(j=strlen(xx[i])-1;j>=0;j--){if(xx[i][j]=='o') {righto=j;break;} }for(j=righto+1;j<strlen(xx[i]);j++) tem[k++]=xx[i][j];for(j=0;j<righto;j++){if(xx[i][j]!='o') tem[k++]=xx[i][j];}strcpy(xx[i],tem);}}或者:注:题目要求的字符串中所有小写字母o左边的字符串内容移到该串的右边存放,即将串中“最后”一个字母o左右两侧的内容互换。

题中第一个while()特环的作用是让p1 指向最后一个字母'o'。

第一个ctrcat()函数的作用是将p1以后的字符都放到新串t中,第二个strcat()函数的作用是将p1以前的字符连接到新串t的后面(注意:在些之前要让p1所指的单元成为p1前面字符串的结束位置*p1='\0')。

这时完成左右互换。

最后一个while()循环的作用是删除新串中的所有小写字母'o',采用的删除方法是不是' o'的字母一律留下,否则不留(即相当于删除。

)void StrOR(void){int i;char *p1,*p2,t[80];for(i=0;i<maxline;i++){t[0]='\0';p2=xx[i];while(*p2){if(*p2=='o') p1=p2;p2++;}strcat(t,p1+1);*p1='\0';strcat(t,xx[i]);p1=xx[i];p2=t;while(*p2){if(*p2!='o') *p1++=*p2;p2++;}*p1='\0';}}或者:注:该题的主要算法是先让两字符指针都指向串尾,然后使一指针(p1)往前移动,当出现不是字母时则表示在p1+1与p2之间是一个单词,并将该单词存入一变量(t1),最后将t1连接到新串中(t);接着再往前找第二个单词,依次类推直到字符串头。

由此可知新串就是原串中各单词的倒排。

void Str0L(void){int i,k;char *p1,*p2;char t[80],t1[80];for(i=0;i<maxline;i++){p2=p1=strchr(xx[i],'\0')-'\0';t[0]=t1[0]='\0';k=1;while(k){while(isalpha(*p1)==0&&p1!=xx[i]) {p1--;p2=p1;}while(isalpha(*p1)&&p1>=xx[i]) p1--;memcpy(t1,p1+1,p2-p1);t1[p2-p1]=0;strcat(t,t1);strcat(t," ");if(p1<xx[i]) k=0;}strcpy(xx[i],t);}}题目4:函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx 中; 请编制函数StrOL( ), 其函数的功能是: 以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排,同时去除标点符号,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx 中。

最后main()函数调用函数WriteDat()把结果xx输出到文件OUT6.DAT中。

例如: 原文: You He MeI am a student.结果: Me He Youstudent a am I原始数据文件存放的格式是: 每行的宽度均小于80个字符, 含标点符号和空格。

-----------------类型:字符串(单词)的倒置和删除。

答案:void StrOL(void) /*标准答案*/{int I,j,k,strl,l;char c;for(I=0;I<maxline;I++)for(j=0;j<strlen(xx[I]);j++){c=xx[I][j];if ((c>='A'&&c<='Z')||(c>='a'&&c<='z')||c==' ') ;else xx[I][j]=' '; }for(l=0;l<maxline;l++){char ch[80]={0}; char pp[80]={0};strl=strlen(xx[l]);I=strl-1; k=1;while(1){while(((xx[l][I]>='a'&&xx[l][I]<='z')||(xx[l][I]>='A'&&xx[l][I]<='z'))&&I>=0) {for(j=k;j>=0;j--)pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++;I--; }strcat(ch,pp);strcpy(pp, """");k=1;if(I==-1)break;while((xx[l][I]<'A'||xx[l][I]>'z')&&I>=0){for(j=k;j>=0;j--)pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++; I--;}strcat(ch,pp); strcpy(pp,"""");k=0;if(I==-1)break;}strcpy(xx[l],ch);}}或者:void StrOL(void){ int i,j,k,m,n,ll;char yy[80];for(i=0; i < maxline; i++){ ll=strlen(xx[i]); k=n=0;for(j=ll-1; j>=0; j--){ if(isalpha(xx[i][j])) k++;else{ for(m=1; m<=k; m++)yy[n++]=xx[i][j+m]; k=0; }if(xx[i][j]==' ') yy[n++]=' ';}for(m=1; m<=k; m++) yy[n++]=xx[i][j+m];yy[n]=0; strcpy(xx[i],yy);}}题目8:函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS1.DAT中。

替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。

注意:部分源程序已给出。

原始数据文件存放的格式是:每行的宽度均小于80个字符。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

------------------------------void encryptChar() /*标准答案*/{int I;char *pf;for(I=0;I<maxline;I++){pf=xx[I];while(*pf!=0){if(*pf*11%256>130||*pf*11%256<=32);else*pf=*pf*11%256;pf++; }}}或者:void encryptChar(){ int i,j;char *p;for(i=0;i<maxline;i++)for(j=0;j<strlen(xx[i]);j++){ p=(xx[i][j]*11)%256;if(p<=32||p>130);else xx[i][j]=p; }}题目9:函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中; 请编制函数SortCharD( ), 其函数的功能是: 以行为单位对字符按从大到小的顺序进行排序, 排序后的结果仍按行重新存入字符串数组xx中。

相关文档
最新文档