码迷,mamicode.com
首页 > 编程语言 > 详细

17.10.27作业 字符数组七则

时间:2017-10-27 22:28:34      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:正整数   算法   word   描述   new   orm   you   wan   hello   

例题(12.3) 忽略大小写的字符串比较 (1016)

 

描述
一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0‘为止。如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如"Hello"和"hello"在忽略字母大小写时是相等的。请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。

关于输入
输入为两行,每行一个字符串,共两个字符串。(每个字符串长度都小于80)

关于输出
如果第一个字符串比第二个字符串小,输出一个字符"<"  如果第一个字符串比第二个字符串大,输出一个字符">"  如果两个字符串相等,输出一个字符"="

例子输入
Hello, how are you?
 hello, How are you?
例子输出
=
提示
编写C程序时,请用gets录入每行字符串,scanf无法录入整行。 
不要使用 strlwr()和strupr()函数来做。

 

技术分享
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     char ch1[80],ch2[80];int judge=0;//定义两个符号型数组来输入,设置一个判断数初始化为0
 7     cin.getline(ch1,80);
 8     cin.getline(ch2,80);//输入两行数组
 9     for (int i = 0; ch1[i] != \0 || ch2[i] != \0; i++)
10     {
11         if (ch1[i] < 97)
12             ch1[i] += 32;
13         if (ch2[i] < 97)
14             ch2[i] += 32;//当ASCII码小于97时数字为大写,此时把它们转换成小写
15         if (ch1[i] > ch2[i])//判断两个元素的大小,要是两个元素不等把判断值设为1
16         {
17             cout << ">" << endl;
18             judge = 1;
19             break;
20         }
21         else if (ch1[i] < ch2[i])
22         {
23             cout << "<" << endl;
24             judge = 1;
25             break;
26         }
27     }
28     if (judge == 0)//当判断条件为0的时候输出等号
29         cout << "=" << endl;
30 }
View Code

wrong answer:2

将字符串中的小写字母转换成大写字母

描述
给定一个字符串,将其中所有的小写字母转换成大写字母。

关于输入
若干行,每行是一个字符串(长度不超过100)。  输入以Ctrl+Z结束,也就是强行中断输入流,此时cin表达式运行结果为false。在正常情况下cin表达式的运行结果都是true。因此,本题可以使用  while(cin>>str)  {    处理当前行的字符串  } 

关于输出
将输入的字符串中所有小写字母转换成大写字母后的字符串。

例子输入
helloworld123Ha
例子输出
HELLOWORLD123HA

 

技术分享
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     char str[101], i = 0;//定义一个符号数组和一个循环数
 7     while (cin >> str)//在终止符前一直可以输入
 8     {
 9         for (i = 0; str[i] != \0; i++)//循环判断将小写字母改为大写
10         {
11             if (str[i] >= 97 && str[i] <= 122)
12                 str[i] -= 32;
13         }
14             cout << str;//输出整个字符串
15             cout << endl;
16             continue;
17     }}
View Code

注意while(cin>>str)用法

单词替换

描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 

关于输入
输入包括3行:    第1行是包含多个单词的字符串 s    第2行是待替换的单词 a (长度<=100)    第3行是a将被替换的单词 b (长度<=100) 
s, a, b 最前面和最后面都没有空格。 

关于输出
输出只有 1 行:    将s中所有单词a替换成b之后的字符串。 
如果s中单词a没有出现,则将s原样输出。

例子输入
You want someone to help you
 You
 I
 
例子输出
I want someone to help you
 
提示
可以用 gets() 函数来输入带空格的字符串。

 

技术分享
 1 #include <iostream>
 2 #include<string.h>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     char s[101][101], a[101], b[101], ch; int len, lin = 0, col = 0; //定义一个二维符号数组s,两个一维的a和b,定义一个符号ch以备程序中判断,定义b的长度len,初始化行数lin和列数col
 8     for (int i = 0;;)
 9     {
10         cin.get(ch);//把输入的每个元素赋值给ch
11         if (ch ==  )//如果ch为空格,把最后输入的值后面那一格赋为null,然后增加行数,使列数归0,如果ch为回车,那么结束输入并填入null值,如果ch为一个字母,就把它填入当前行列,达到每行一个单词的目的
12         {
13             s[lin][col] = \0;
14             lin++; col = 0;
15         }
16         else if (ch == \n)
17         {
18             s[lin][col] = \0;
19             break;
20         }
21         else
22         {
23             s[lin][col] = ch; col++;
24         }
25     }
26     cin.getline(a, 101); cin.getline(b, 101);
27     len = strlen(b);
28     for (int i = 0; i <= lin; i++)  
29     {
30         if (strcmp(s[i], a) == 0)       //当某一行的单词和a一样时,将这一行替换为b
31             for (int j = 0; s[i][j] != \0||b[j]!=\0; j++)
32             {
33                 if (j < len)
34                     s[i][j] = b[j];
35                 else
36                     s[i][j] = \0;
37                 s[i][j + 1] = \0;
38             }
39     }
40     for (int i = 0; i < lin; i++)
41         cout << s[i] << " ";
42     cout << s[lin] << endl;
43 }
View Code

wrong answer:2(字符串长度考虑漏了)

1079 统计字符数

描述
判断一个由a-z 这26 个字符组成的字符串中哪个字符出现的次数最多

关于输入
第1 行是测试数据的组数n,每组测试数据占1 行,是一个由a-z 这26 个字符组成的字符串  每组测试数据之间有一个空行,每行数据不超过1000 个字符且非空

关于输出
n 行,每行输出对应一个输入。一行输出包括出现次数最多的字符和该字符出现的次数,中  间是一个空格。  如果有多个字符出现的次数相同且最多,那么输出ascii 码最小的那一个字符。

例子输入
2
 abbccc
 adfadffasdf
例子输出
c 3
 f 4

 

技术分享
 1 #include <iostream>
 2 using namespace std;
 3 int main() {
 4     int n, count[27], word, max;  //定义整数n,用来计算字母个数的数组count,最多字母编号word,以及最大重复数max
 5     cin >> n;
 6     cin.ignore();     //吸收掉输入n后的回车符
 7     char str[1001], result;  //定义符号型数组来储存字符串,以及出现最多的字母result
 8     for (int i = 0; i<n; i++)
 9     {
10         for (int j = 1; j <= 26; j++)         //初始化数组count
11         count[j] = 0;
12         cin.getline(str, 1001);       //输入字符串
13         cin.ignore();
14         for (int j = 0; str[j] != \0; j++)   //在循环中计算所有字母个数的出现次数
15             count[str[j] - 96]++;
16         max = count[1]; word = 1;   //初始化max和word
17         for (int j = 1; j <= 26; j++)      //在循环中比较max和count中元素的大小确定出结果
18         {
19             if (max<count[j])
20             {
21                 max = count[j];
22                 word = j;
23             }
24         }
25         result = word + 96;
26         cout << result << " " << max << endl;
27     }
28 }
View Code

 验证子串

描述
输入两个字符串,验证其中一个串是否为另一个串的子串

关于输入
两个字符串,长度小于100

关于输出
若第一个串s1是第二个串s2的子串,则输出(s1) is substring of (s2)  否则,若第二个串s2是第一个串s1的子串,输出(s2) is substring of (s1)  否则,输出 No substring 

例子输入
abc
 dddncabca
例子输出
abc is substring of dddncabca
提示
字符串匹配算法
技术分享
 1 #include <iostream>
 2 #include<string.h>
 3 using namespace std;
 4 int main() {
 5     char s1[100], s2[100];           //定义两个数组来储存两条字符串
 6     int judge = 1, len1, len2;      //设置一个判断值judge,定义两个字符串的长度
 7     cin.getline(s1, 100);
 8     cin.getline(s2, 100);
 9     len1 = strlen(s1);
10     len2 = strlen(s2);
11     if (len1 > len2)         //当第一条字符串比较大,另一条有可能是它的子串
12     {
13         for (int i = 0; i <= len1 - len2; i++)        //对以s1[len1-len2]前的所有元素为首的,len2长度的子串和s2进行比较(忘了用strcmp)
14         {
15             for (int j = 0; s2[j] != \0; j++) 
16             {
17                 judge = 1;
18                 if (s1[i + j] != s2[j])
19                 {
20                     judge = 0; break;
21                 }
22 
23             }
24             if (judge == 1)
25             {
26                 cout << s2 << " is substring of " << s1 << endl;
27                 break;
28             }
29         }
30             if (judge == 0)
31                 cout << "No substring" << endl;
32     }
33     if (len1<= len2)    //然后考虑len2比较长的情况
34     {
35         for (int i = 0; i <= len2 - len1; i++)
36         {
37             for (int j = 0; s1[j] != \0; j++)
38             {
39                 judge = 1;
40                 if (s2[i + j] != s1[j])
41                 {
42                     judge = 0; break;
43                 }
44 
45             }
46             if (judge == 1)
47             {
48                 cout << s1 << " is substring of " << s2 << endl;
49                 break;
50             }
51         }
52         if (judge == 0)     //如果两种情况下都没有找到
53             cout << "No substring" << endl;
54     }
55 }
View Code

例题(12.9) 数制转换

描述
求任意两个不同进制非负整数的转换(2进制~36进制),所给整数在long所能表达的范围之内。  不同进制的表示符号为(0,1,...,9,a,b,...,z)或者(0,1,...,9,A,B,...,Z)。

关于输入
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。  a,b是十进制整数,2 ≤ a,b < 36。

关于输出
输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,Z)。

例子输入
15 Aab3 7
例子输出
210306
提示
可以用字符串表示不同进制的整数

 

技术分享
 1 #include <iostream>
 2 #include<string.h>
 3 #include<math.h>
 4 using namespace std;
 5 int main() {
 6     int a, b, mutNum, over,len,mut,bMut;    //定义整数a,b,备用变量mutNum,over分别代表次方数和除数,字符串的长度len,结果的最大长度mut,和b的mut次方bMut
 7     char ch, numStr[100];      //定义符号ch为一个中间量,供删去回车符和输出字符,定义一个储存输入的进制数
 8     long num=0;      //初始化输入的进制数的十进制形式num
 9     cin >> a;
10     cin.get(ch); //删减回车符
11     cin.get(numStr, 100, ); //输入字符串,遇到空格停止
12     cin >> b;
13     len = strlen(numStr);
14     if (a != b)
15     {
16         for (int i = 0; numStr[i] != 0; i++)     //得出num
17         {
18             if (numStr[i] >= a)
19                 numStr[i] -= 32;
20             if (numStr[i] <= 57)
21                 numStr[i] += 7;
22             mutNum = pow(a, len - i - 1);
23             num += mutNum*(numStr[i] - 55);
24         }
25         mut = 1; bMut = b;      //初始化mut和bMut     
26         while (bMut <= num)        //得出mut
27         {
28             bMut = bMut*b;
29             mut++;
30         }
31         for (int i = mut - 1; i >= 0; i--)          //输出结果
32         {
33             over = num / pow(b, i);
34             if (over <= 9)
35                 cout << over;
36             else
37             {
38                 ch = over + 55;
39                 cout << ch;
40             }
41             mutNum = pow(b, i);
42             num = num%mutNum;
43         }
44     }
45     else
46         cout << numStr << endl;
47 }
View Code

wrong answer:1(ASCII码)

大整数减法

描述
求2个大的正整数相减的差

关于输入
第1行是测试数据的组数n,每组测试数据占2行,第1行是被减数a,第2行是减数b(a > b)。每组测试数据之间有一个空行,每行数据不超过100位

关于输出
n行,每组测试数据有一行输出是相应的整数差

例子输入
2
 9999999999999999999999999999999999999
 9999999999999
 
 5409656775097850895687056798068970934546546575676768678435435345
 1
例子输出
9999999999999999999999990000000000000
 5409656775097850895687056798068970934546546575676768678435435344

 

#include <iostream>
#include<string.h>
using namespace std;
int main() {
	char s1[101], s2[101];            //定义两个数组分别储存两个大整数
	int n, a1[101], a2[101],a3[101],len1,len2,num;   //定义n,数组a1和a2分别储存大整数的每一位,a3数组储存这两个大整数的差,定义两个字符串的长度,定义s1位数与a3位数差的值num
	cin >> n;
	cin.ignore(); //删去回车
	for (int j = 0; j < n; j++)
	{
		cin.getline(s1, 101);
		cin.getline(s2, 101);
		len1 = strlen(s1); len2 = strlen(s2);
		for (int i = 0; i < len1; i++)        //把s1中表示的每一位数输入a1,初始化a2为和a1相同长度的数组
		{
			a2[i] = 0;
			a1[i] = s1[i] - ‘0‘;
		}
		for (int i = 0; i < len2; i++)           //把s2中的数字输入
			a2[i + len1 - len2] = s2[i] - ‘0‘;
		for (int i = len1-1; i >=0; i--)        //逐位数做差得到a3
		{
			a3[i] = a1[i] - a2[i];
			if(a3[i]<0)
			{
				a1[i - 1]--; a3[i] += 10;
			}
		}
		for(int i=0;i<len1;i++)          //得出num
			if(a3[i]!=0)
			{
				num = i;
				break;
			}
		for (int i = num; i < len1; i++)
			cout << a3[i] ;
		cout << endl;
		cin.ignore();
	}
}

wrong answer:2(算法注意)

 

17.10.27作业 字符数组七则

标签:正整数   算法   word   描述   new   orm   you   wan   hello   

原文地址:http://www.cnblogs.com/yalphait/p/7745431.html

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