输入一串字符串统计字符个数

摘要

题目:

1.利用键盘录入,输入一个字符串,统计该字符串中各个字符的数量,并输出。

方法一(python)

直接统计英文字符,大写和小写

思路:

  • 1、建立26个英文字母的大写和小写部分
  • 2、分别对输入数据进行轮寻
  • 3、查找这些字母中重复字母的个数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
'''牛客网的输入输出格式--'''
import sys
'''
直接统计英文字符,大写和小写
思路:
1、建立26个英文字母的大写和小写部分
2、分别对输入数据进行轮寻
3、查找这些字母中重复字母的个数。
'''
data="Thdddfffffffhhhhhbbbbbbbbb"

def inputstr():
datastr = []
print('请输入数据:')
while True:
line = sys.stdin.readline().strip()
if not line:
break
datastr.append(line)
# print("-".join(datastr))
return datastr


def numstr(data):
list_num = [] # A-z 26
list_num_ = [] # a-z 26
out_dict = {}
for i in range(26):
list_num.append(chr(ord('A') + i))
list_num_.append(chr(ord('a') + i))
k = 0
for j in range(len(data)):
if list_num[i] == data[j]:
k += 1
out_dict[list_num[i]] = k
k = 0
for j in range(len(data)):
if list_num_[i] == data[j]:
k += 1
out_dict[list_num_[i]] = k
return out_dict


if __name__ == "__main__":
outline = inputstr()[0]
out_dict = numstr(outline)
for key in out_dict.keys():
print(key, out_dict[key])


# print(dict.keys(), type(dict.keys()))

输入输出演示

1
2
3
4
5
6
7
8
9
10
11
12
/home/porter/tempprogram/bishi/venv/bin/python /home/porter/tempprogram/bishi/test2.py
请输入数据:
dfhgjhGGhjj

G 2
f 1
j 3
d 1
g 1
h 3

Process finished with exit code 0

方法二(python)

直接统计英文字符,大写和小写包括数字符号等

思路:

  • 1、统计输入字符串中的字符不一样的字符
  • 2、分别对不一样的字符在整个输入字符列表中进行遍历
  • 3、查找这些字母中重复字母的个数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sys
'''
直接统计英文字符,大写和小写包括数字符号等
思路:
1、统计输入字符串中的字符不一样的字符
2、分别对不一样的字符在整个输入字符列表中进行遍历
3、查找这些字母中重复字母的个数。
'''
datastr = ['asddfgghhh']


def inputstr():
global datastr
datastr = []
print('请输入数据:')
while True:
line = sys.stdin.readline().strip()
if not line:
break
datastr.append(line)
# print("-".join(datastr))
# return datastr


def tongji(datain):
datadifferent = []
data_out = {}
# 统计差异字母
for data in datain:
if data not in datadifferent:
datadifferent.append(data)
print(datadifferent)
for i in range(len(datadifferent)):
k = 0
for data in datain:
if data == datadifferent[i]:
k += 1
data_out[data] = k
print(data_out)

if __name__ == '__main__':
inputstr()
tongji(datastr[0])

输入输出演示

1
2
3
4
5
6
7
请输入数据:
asdfghhhhhhhhh

['a', 's', 'd', 'f', 'g', 'h']
{'d': 1, 's': 1, 'f': 1, 'h': 9, 'a': 1, 'g': 1}

Process finished with exit code 0

方法三(python)

直接统计英文字符,大写和小写包括数字符号等

思路:

  • 1、将输入的字符串按照
  • 2、分别对不一样的字符在整个输入字符列表中进行遍历
  • 3、查找这些字母中重复字母的个数。

方法三的代码是方法二的另一种简单的实现方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import sys
'''
直接统计英文字符,大写和小写包括数字符号等
思路:
1、统计输入字符串中的字符不一样的字符
2、分别对不一样的字符在整个输入字符列表中进行遍历
3、查找这些字母中重复字母的个数。
'''
datastr = ['asddfgghhh']


def inputstr():
global datastr
datastr = []
print('请输入数据:')
while True:
line = sys.stdin.readline().strip()
if not line:
break
datastr.append(line)

def tongji(datain):
datadifferent = []
data_out = {}
# 统计差异字母
for data in datain:
if data not in datadifferent:
datadifferent.append(data)
data_out[data] = 1
else:
data_out[data] = data_out[data]+1
print(datadifferent)
print(data_out)

if __name__ == '__main__':
inputstr()
tongji(datastr[0])


输入输出演示

1
2
3
4
5
6
7
请输入数据:
fffghhh

['f', 'g', 'h']
{'g': 1, 'h': 3, 'f': 3}

Process finished with exit code 0

上面的代码实现是python的实现方式,接下来我将进行C/C++的方式进行实现

方法一(c/c++)

直接统计英文字符,大写和小写包括数字符号等

思路:

  • 1、将输入的字符串按照
  • 2、分别对不一样的字符在整个输入字符列表中进行遍历
  • 3、查找这些字母中重复字母的个数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <stdlib.h>

/*
* 输入字符串数组不超过20个字符的输入 shurustr
* 存储不同字符串的一个命名数组 chayimingm
* 按照对应位置存储的差异字符对应的数目的字符数组 chayinum
* 均为20个字符空间大小
*
* 算法,使用统计差异字符的符号,并存储到命名数组 chayimingm
* 通过差异命名数组 chayimingm 中的元素,来轮询 输入字符串 shurustr 中的字符 *
*
*/

#define N 26
char shurustr[N]={'\0'};//输入字符串的存储变量
char chayimingm[N]={'\0'},chayinum[N]={0}; //输出字符串的变量存储区

void tongji(char *p)
{
for(;*p!='\0';p++)
{
for(int i=0;i<N;i++)
{
if(*p == chayimingm[i])
{
chayinum[i] += 1;
break;
}
else
{
if(chayimingm[i] == '\0')
{
chayimingm[i] = *p;
chayinum[i] = 1;
break;
}
}

}

}

for(int i=0;i<N;i++)
{
if(chayimingm[i] == '\0')break;
printf("字符:%c 的个数为:%d\n",chayimingm[i],chayinum[i]);
}
}

int main(void)
{
printf("请输入字符串:\n");
scanf("%s",shurustr);
printf("输出的字符串为:%s \n", shurustr);
tongji(shurustr);
return 0;

}


输入输出演示

1
2
3
4
5
6
7
8
9
请输入字符串:
aaassskkkkggc
输出的字符串为:aaassskkkkggc
字符:a 的个数为:3
字符:s 的个数为:3
字符:k 的个数为:4
字符:g 的个数为:2
字符:c 的个数为:1
按 <RETURN> 来关闭窗口...

方法二(c/c++)

直接统计英文字符,大写和小写包括数字符号等

思路

  • 输入字符串数组不超过20个字符的输入 shurustr
  • 存储不同字符串的一个命名数组 chayimingm
  • 按照对应位置存储的差异字符对应的数目的字符数组 chayinum
  • 均为20个字符空间大小
  • 算法,分别匹配26个英文大写字母和英文小写字母

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>
#include <stdlib.h>

/*
* 输入字符串数组不超过20个字符的输入 shurustr
* 存储不同字符串的一个命名数组 chayimingm
* 按照对应位置存储的差异字符对应的数目的字符数组 chayinum
* 均为20个字符空间大小
*
* 算法,分别匹配26个英文大写字母和英文小写字母
*
*/
#define N 40
int chayimingm_up[26] = {0};
int chayimingm_small[26] = {0};

void tongji_xiaoxie(char *shurustr)
{
char tempchar = 'A';
printf("开始计算\n");
for(int i=0;i<26;i++)
{
chayimingm_up[i] = 0;
// printf("数据为:%c\n",tempchar);
for(int j=0;j<N;j++)
{
if(tempchar == shurustr[j])
{
chayimingm_up[i]+=1;
}
}
tempchar +=1;
}

tempchar = 'a';
for(int i=0;i<26;i++)
{
chayimingm_small[i] = 0;
// printf("数据为:%c\n",tempchar);
for(int j=0;j<N;j++)
{
if(tempchar == shurustr[j])
{
chayimingm_small[i]+=1;
}
}
tempchar +=1;
}


tempchar = 'a';
for(int i=0;i<26;i++)
{
if(chayimingm_small[i]>0)
{
printf("字符:%c 个数为:%d ",tempchar, chayimingm_small[i]);
}
tempchar +=1;
}
tempchar = 'A';
for(int i=0;i<26;i++)
{
if(chayimingm_up[i]>0)
{
printf("字符:%c 个数为:%d ",tempchar, chayimingm_up[i]);
}
tempchar +=1;
}

}


int main(void)
{
char strin[40]={'\0'};
printf("请输入字符串:\n");
scanf("%s",strin);
printf("输入的字符串为:%s \n",strin);
tongji_xiaoxie(strin);
return 0;
}

代码效果演示

1
2
3
4
5
请输入字符串:
sddffffffdddssll
输入的字符串为:sddffffffdddssll
开始计算
字符:d 个数为:5 字符:f 个数为:6 字符:l 个数为:2 字符:s 个数为:3 按 <RETURN> 来关闭窗口...
文章目录
  1. 1. 摘要
    1. 1.0.1. 题目:
  2. 1.1. 方法一(python)
    1. 1.1.1. 直接统计英文字符,大写和小写
    2. 1.1.2. 思路:
  3. 1.2. 方法二(python)
    1. 1.2.1. 直接统计英文字符,大写和小写包括数字符号等
    2. 1.2.2. 思路:
  4. 1.3. 方法三(python)
    1. 1.3.1. 直接统计英文字符,大写和小写包括数字符号等
    2. 1.3.2. 思路:
    3. 1.3.3. 输入输出演示
  5. 1.4. 方法一(c/c++)
    1. 1.4.1. 直接统计英文字符,大写和小写包括数字符号等
    2. 1.4.2. 思路:
    3. 1.4.3. 输入输出演示
  6. 1.5. 方法二(c/c++)
    1. 1.5.1. 直接统计英文字符,大写和小写包括数字符号等
    2. 1.5.2. 思路
    3. 1.5.3. 代码效果演示
|