规则如下:裁判会在纸上写下两行由大写英文字母组成的字符串。要求参赛的选手凭眼力和记忆力统计出在两个字符串中都出现的字母共有多少个。比如 ABACFGG AAADCG 两个字符串中都出现的字母有AACG,一共有4个。 另外还要统计相同的位置上出现相同字母的一共有多少个。 c语言代码和方法输入 复制 ABACFGG AAADCG 输出 复制 4 3
时间: 2023-05-11 10:02:12 浏览: 141
以下是C语言代码实现:
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
int count = 0, samePosCount = 0;
scanf("%s %s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2);
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
if (str1[i] == str2[j]) {
count++;
if (i == j) {
samePosCount++;
}
}
}
}
printf("%d %d", count, samePosCount);
return 0;
}
输入 ABACFGG AAADCG,输出 4 3,其中第一个数字表示两个字符串中都出现的字母数量,第二个数字表示相同位置上出现相同字母的数量。
相关问题
规则如下:裁判会在纸上写下两行由大写英文字母组成的字符串。要求参赛的选手凭眼力和记忆力统计出在两个字符串中都出现的字母共有多少个。比如 ABACFGG AAADCG 两个字符串中都出现的字母有AACG,一共有4个。 另外还要统计相同的位置上出现相同字母的一共有多少个。 c++
这是一个字符串匹配问题,可以使用哈希表来实现。首先遍历第一个字符串,将每个字母出现的次数记录在哈希表中。然后遍历第二个字符串,如果当前字母在哈希表中出现过,则将共同出现的字母计数器加一,并将哈希表中对应字母的计数器减一。同时,如果两个字符串在相同位置上出现相同字母,则将相同位置上出现相同字母的计数器加一。最后输出共同出现的字母计数器和相同位置上出现相同字母的计数器即可。
以下是示例代码:
```python
def count_common_letters(s1, s2):
common_count = 0
same_position_count = 0
letter_count = {}
for letter in s1:
letter_count[letter] = letter_count.get(letter, 0) + 1
for i, letter in enumerate(s2):
if letter in letter_count and letter_count[letter] > 0:
common_count += 1
letter_count[letter] -= 1
if i < len(s1) and s1[i] == letter:
same_position_count += 1
return common_count, same_position_count
```
调用示例:
```python
s1 = "ABACFGG"
s2 = "AAADCG"
common_count, same_position_count = count_common_letters(s1, s2)
print("共同出现的字母数:", common_count)
print("相同位置上出现相同字母的数:", same_position_count)
```
输出结果:
```
共同出现的字母数: 4
相同位置上出现相同字母的数: 2
```
本题要求实现一个汇编程序,将给定字符串中的英文字母全部转换成大写字母。已知该字符串的内容由英文大写字母、小写字母、数字、符号(如*、#、!等)组成,末尾是$符。 裁判测试程序样例: section .data ... section .text ... main: ... call strconvert ... /* 你的代码将被嵌在这里 */ 子程序接口定义: strconvert 输入参数:ebx存放字符串首地址 输入样例: Lockdowns prevented nearly 5 million U.S. coronavirus cases, study says. 输出样例: LOCKDOWNS PREVENTED NEARLY 5 MILLION U.S. CORONAVIRUS CASES, STUDY SAYS.
实现思路:
1. 遍历字符串,逐个判断字符是否为小写字母
2. 如果是小写字母,将其转换为大写字母
3. 如果已经到字符串末尾,则结束转换
实现代码如下:
```
section .text
global strconvert
strconvert:
push ebp ; 保存调用现场
mov ebp, esp
mov esi, ebx ; esi指向字符串首地址
mov ecx, 0 ; ecx为字符计数器
loop1:
mov al, byte [esi] ; 读取一个字符
cmp al, '$' ; 判断是否到字符串末尾
je end_convert
cmp al, 'a' ; 判断是否为小写字母
jb next_char
cmp al, 'z'
ja next_char
sub al, 32 ; 将小写字母转换为大写字母
mov byte [esi], al ; 将转换后的字符写回字符串
inc ecx ; 计数器加1
next_char:
inc esi ; 指向下一个字符
jmp loop1
end_convert:
pop ebp ; 恢复调用现场
ret
```
注:在汇编语言中,字符常量在内存中存储的是其ASCII码。因此,将小写字母转换为大写字母,只需要将其ASCII码减去32即可。