/*
3去除字符串首尾多余的空格(20分)
题目内容:
用户输入一个字符串,首尾有多余的空格,编写程序来去除这些多余的空格。要求必须使用指针来完成本题。
输入格式:
一个首尾有多余空格字符串。为了便于标识出尾部的空格,在字符串尾部额外添加了个#号表示字符串结束。
字符串内部保证不会出现#号。
输出格式:
去除空格后的字符串,同样在在字符串尾部额外添加了个#号表示字符串结束。
输入样例:
my score #
输出样例:
my score#
*/
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char**argv)
{
char str[300];
cin.getline(str,300);
char *s = str;
while( *s == ' '){
s++;
}
int len = strlen(s);
for( int i = len - 1 ; i >= 0; i--){
if(s[i - 1] == ' '){
s[i - 1] = '#';
s[i] = '\0';
}
else{
break;
}
}
cout<<s;
return 0;
}
/*
7(本题只记3分)十进制点分IP转换为32位二进制IP(3分)
题目内容:
编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。
用户输入的IP不和法时,输出"data error"。
请使用模块化程序设计的思想,将功能模块编写成函数。通过指针传递参数,操作数据,返回结果。
在主函数中输入IP地址,调用函数进行合法性验证和转换,在主函数中输出32位二进制IP。
输入格式:
十进制点分IP地址(英文句点)
输出格式:
32位二进制数(二进制字符串)
输入样例:
202.151.96.33
输出样例:
11001010100101110110000000100001
提示:十进制转换为二进制。对整数部分,除2取余,直到商为0。例如
13/2=6.....1(低位)
6/2=3......0
3/2=1......1
1/2=0......1
转换后的二进制数位1101
*/
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cmath>
using namespace std;
int getDec(char *p);
void dec2Bin(int ipDec);
bool isLegal(char *p);
int main(){
char ipOrig[100];
cin.getline(ipOrig, 100);
int len = strlen(ipOrig);
if(isLegal(ipOrig)){
int ipDec = getDec(ipOrig);
dec2Bin(ipDec);
for(int i = 0; i < len; i++){
if( ipOrig[i] == '.'){
ipDec = getDec(ipOrig + i + 1);
dec2Bin(ipDec);
}
else if( ipOrig[i] != '.'){
}
}
}
else{
cout<<"data error";
}
return 0;
}
int getDec(char *p){
int num = 0, sum = 0;
for(int i = 0; p[i] != '.' && p[i] !='\0'; i++){
num = p[i] - '0';
sum = sum * 10 + num;
}
return sum;
}
void dec2Bin(int ipDec){
int ipBin = 0, i = 0;
int remainder = 0;
while(ipDec != 0){
remainder = ipDec % 2;
ipDec = ipDec / 2;
ipBin += remainder * pow(10, i);
i++;
}
cout<<setfill('0')<<setw(8)<<ipBin;
}
bool isLegal(char *p){
int num = 0;
int digit = 0;
int len = strlen(p);
if(*p <'0' || *p >'9'){
return false;
}
for (int i = 0; i < len; i++){
if (p[i] == '.'){
num++;
digit = 0;
if(p[i+1] == '.'){
return false;
}
}
else if( p[i] <'0' || p[i] >'9'){
return false;
}
else{
digit++;
if(digit > 3){
return false;
}
}
}
if( num != 3){
return false;
}
int ipDec = getDec(p);
if(ipDec >255){
return false;
}
for(int i = 0; i < len; i++){
if( p[i] == '.'){
int ipDec = getDec(p + i + 1);
if(ipDec > 255){
return false;
}
}
}
return true;
}