1、
1 #include <iostream> 2 using namespace std; 3 4 // 用于测试结果 5 void print(char *pOutputStr) 6 { 7 char *p = pOutputStr; 8 while(p != NULL && *p != 0) 9 { 10 cout << *p ; 11 ++p; 12 } 13 cout << endl; 14 } 15 16 /************************************************************************/ 17 /* 18 编程题第一题 19 */ 20 /************************************************************************/ 21 /* 22 【输入】 pInputStr: 输入字符串 23 lInputLen: 输入字符串长度 24 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 25 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 26 */ 27 void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr) 28 { 29 bool table[26] = {false}; 30 long k = 0; 31 for(long i = 0; i < lInputLen; ++i) 32 { 33 char c = pInputStr[i]; 34 if(table[c-'a'] == false) 35 { 36 pOutputStr[k++] = c; 37 table[c-'a'] = true; 38 } 39 } 40 pOutputStr[k] = 0; 41 } 42 43 44 45 /************************************************************************/ 46 /* 47 编程题第二题 48 */ 49 /************************************************************************/ 50 /* 51 【输入】 pInputStr: 输入字符串 52 lInputLen: 输入字符串长度 53 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 54 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 55 */ 56 57 void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) 58 { 59 long repeat = 1; 60 long k = 0; 61 for(long i = 0; i < lInputLen; ++i) 62 { 63 char c = pInputStr[i]; 64 if(i + 1 < lInputLen && c == pInputStr[i + 1]) 65 { 66 ++ repeat; 67 } 68 else 69 { 70 // 写入 71 if(repeat != 1) 72 { 73 // 当心repeat超过9的情况 74 75 char temp[100]; 76 itoa(repeat, temp, 10); 77 int ii = 0; 78 while(temp[ii]) 79 { 80 pOutputStr[k++] = temp[ii++]; 81 } 82 } 83 pOutputStr[k++] = c; 84 repeat = 1; 85 } 86 } 87 pOutputStr[k] = 0; 88 } 89 90 /************************************************************************/ 91 /* 92 编程题第三题 93 */ 94 /************************************************************************/ 95 /* 96 【输入】 pInputStr: 输入字符串 97 lInputLen: 输入字符串长度 98 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 99 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 100 */ 101 void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr) 102 { 103 pOutputStr[0] = '0'; 104 pOutputStr[1] = 0; 105 if(!pInputStr) 106 { 107 return; 108 } 109 // 获得第一个操作数 110 int operand1 = 0; 111 long index = 0; 112 while(pInputStr[index] >= '0' && pInputStr[index] <= '9') 113 { 114 operand1 = operand1 * 10 + (pInputStr[index++] - '0'); 115 if(index >= lInputLen) return; 116 } 117 if(pInputStr[index++] != ' ' || index >= lInputLen) 118 { 119 return; 120 } 121 // 获得操作符 122 char oper; 123 if(pInputStr[index] == '+' || pInputStr[index] == '-') 124 { 125 oper = pInputStr[index++]; 126 } 127 else 128 { 129 return; 130 } 131 if(index >= lInputLen || pInputStr[index++] != ' ') 132 { 133 return; 134 } 135 if(index >= lInputLen) return; 136 // 获得第二个操作数 137 int operand2 = 0; 138 while(pInputStr[index] >= '0' && pInputStr[index] <= '9') 139 { 140 operand2 = operand2 * 10 + (pInputStr[index++] - '0'); 141 if(index >= lInputLen) return; 142 } 143 if(pInputStr[index] != 0) 144 { 145 return; 146 } 147 // 输入都是合法的 148 int result; 149 switch(oper) 150 { 151 case '+': 152 result = operand1 + operand2; 153 break; 154 case '-': 155 result = operand1 - operand2; 156 break; 157 } 158 int k = 0; 159 if(result < 0) 160 { 161 result = -result; 162 pOutputStr[k++] = '-'; 163 } 164 itoa(result, pOutputStr + k, 10); 165 } 166 167 int main() 168 { 169 // 第一题测试样例 170 char output1[100], output2[100], output3[100]; 171 char *input1 = "deefd"; 172 stringFilter(input1, strlen(input1) + 1, output1); 173 print(output1); 174 char *input2 = "afafafaf" ; 175 stringFilter(input2, strlen(input2) + 1, output2); 176 print(output2); 177 char *input3 = "pppppppp" ; 178 stringFilter(input3, strlen(input3) + 1, output3); 179 print(output3); 180 181 182 // 第二题测试样例 183 char output21[100], output22[100], output23[100]; 184 char *input21 = "aaaaaaaaaaaaaaaaaaaaaaaaabbcd"; 185 stringZip(input21, strlen(input21) + 1, output21); 186 print(output21); 187 char *input22 = "cccddecc"; 188 stringZip(input22, strlen(input22) + 1, output22); 189 print(output22); 190 char *input23 = "8p"; 191 stringZip(input23, strlen(input23) + 1, output23); 192 print(output23); 193 194 // 第三题测试样例 195 char output31[100], output32[100], output33[100]; 196 char *input31 = "4 + 7"; 197 arithmetic(input31, strlen(input31) + 1, output31); 198 print(output31); 199 char *input32 = "4 - 7"; 200 arithmetic(input32, strlen(input32) + 1, output32); 201 print(output32); 202 char *input33 = "9 ++ 7"; 203 arithmetic(input33, strlen(input33) + 1, output33); 204 print(output33); 205 }
1 void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr) 2 { 3 pOutputStr[0] = '0'; 4 pOutputStr[1] = 0; 5 if(!pInputStr) 6 { 7 return; 8 } 9 // 获得第一个操作数 10 int operand1 = 0; 11 long index = 0; 12 while(pInputStr[index] >= '0' && pInputStr[index] <= '9') 13 { 14 operand1 = operand1 * 10 + (pInputStr[index++] - '0'); 15 if(index >= lInputLen) return; 16 } 17 if(pInputStr[index++] != ' ' || index >= lInputLen) 18 { 19 return; 20 } 21 // 获得操作符 22 char oper; 23 if(pInputStr[index] == '+' || pInputStr[index] == '-') 24 { 25 oper = pInputStr[index++]; 26 } 27 else 28 { 29 return; 30 } 31 if(index >= lInputLen || pInputStr[index++] != ' ') 32 { 33 return; 34 } 35 if(index >= lInputLen) return; 36 // 获得第二个操作数 37 int operand2 = 0; 38 while(pInputStr[index] >= '0' && pInputStr[index] <= '9') 39 { 40 operand2 = operand2 * 10 + (pInputStr[index++] - '0'); 41 if(index >= lInputLen) return; 42 } 43 if(pInputStr[index] != 0) 44 { 45 return; 46 } 47 // 输入都是合法的 48 int result; 49 switch(oper) 50 { 51 case '+': 52 result = operand1 + operand2; 53 break; 54 case '-': 55 result = operand1 - operand2; 56 break; 57 } 58 int k = 0; 59 if(result < 0) 60 { 61 result = -result; 62 pOutputStr[k++] = '-'; 63 } 64 itoa(result, pOutputStr + k, 10); 65 }