本文主要是介绍题记(28)--A+B(字符串操作),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、题目内容
二、输入描述
三、输出描述
四、输入输出示例
五、完整C语言代码
一、题目内容
读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出.
二、输入描述
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
三、输出描述
对每个测试用例输出1行,即A+B的值.
四、输入输出示例
输入:
one + two = three four + five six = zero seven + eight nine = zero + zero =输出:
3 90 96
五、完整C语言代码
AC代码~#include<stdio.h>
#include<string.h>int cmp(char* s1, char* s2, int len) { // 判断两串是否相等for (int i = 0; i < len; i++)if (s1[i] != s2[i])return 0;return 1;
}int main() {char s[100];char num[10][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};while (gets(s)) {int num1 = 0; // num1和num2存储最终相加的两个数int num2 = 0;int i = 0;int k = 0;int a = 0;char tmp[10]; // 第一个数第一位char tmp2[10];// 第一个数第二位while (s[i] != '+') {if ('a' <= s[i] && s[i] <= 'z' && k == 0) {tmp[i] = s[i];i++;} else if ('a' <= s[i] && s[i] <= 'z' && k == 1) {tmp2[a] = s[i];a++;i++;} else { // s[i] == ' 'if (k == 0) {for (int j = 0; j < 10; j++) {if (cmp(tmp, num[j], strlen(num[j]))) {num1 = num1 * 10 + j;k = 1;break;}}} else {for (int j = 0; j < 10; j++) {if (cmp(tmp2, num[j], strlen(num[j]))) {num1 = num1 * 10 + j;break;}}}i++;}}i = i + 2;char tmp3[10]; // 第二个数第一位char tmp4[10]; // 第二个数第二位k = 0;int j = 0;a = 0;while (s[i] != '=') {if ('a' <= s[i] && s[i] <= 'z' && k == 0) {tmp3[j] = s[i];j++;} else if ('a' <= s[i] && s[i] <= 'z' && k == 1) {tmp4[a] = s[i];a++;} else { // s[i] == ' 'if (k == 0) {for (int p = 0; p < 10; p++) {if (cmp(tmp3, num[p], strlen(num[p]))) {num2 = num2 * 10 + p;k = 1;break;}}} else {for (int p = 0; p < 10; p++) {if (cmp(tmp4, num[p], strlen(num[p]))) {num2 = num2 * 10 + p;break;}}}}i++;}if (num1 == 0 && num2 == 0)break;printf("%d\n", num1 + num2);}
}
这篇关于题记(28)--A+B(字符串操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!