10.輸入m個字符串和一個整數n,把字符串M化成以N爲單位的段,不足位數用0補齊
輸入:123456789, n=8 輸出:12345678 90000000, 輸入:123,n=8 輸出:12300000
#include<stdio.h>
#include<string.h>
void NumberDivide(char *pInputStr, int StrLength, int N, char *pOutputStr)
{
int i,j=0,section_number,string_left_number,k;
if(StrLength<N) //如果輸入字符串長度不足N
{
for(i=0;i<N;++i)
{
if(i>=StrLength) //不足的位數補0
pOutputStr[j++]='0';
else
pOutputStr[j++]=pInputStr[i];
}
}else //輸入字符長度大於分段N
{
section_number=StrLength/N; //可整段輸出的段數
string_left_number=StrLength-N*section_number; //整段輸出後剩餘的字符數
for(i=0;i<section_number;++i) //輸出完整的section_number段長度爲N的字符
{
for(k=0;k<N;++k)
pOutputStr[j++]=pInputStr[i*N+k]; //將輸入字符串N段輸出
pOutputStr[j++]=' '; //N段字符之間用空格隔開
}
for(i=section_number*N;i<section_number*N+N;++i) //輸出剩餘字符串,不足補0
{
if(i>=section_number*N+string_left_number)
pOutputStr[j++]='0';
else
pOutputStr[j++]=pInputStr[i];
}
}
pOutputStr[j]='\0';
}
int main(void)
{
char pInputStr[20],pOutputStr[20];
int StrLength,n;
printf("Input the number sequences:\n");
gets(pInputStr);
StrLength=strlen(pInputStr);
printf("Input the n:\n");
scanf("%d",&n);
NumberDivide(pInputStr,StrLength,n,pOutputStr);
puts(pOutputStr);
return 0;
}
11. 電話號碼
輸入:OneTwoThree 輸出:123 ,輸入:OneTwoDoubleTwo 輸出:1222。有空格,非法字符,兩個Double相連,Double位於最後一個單詞都錯誤
#include<stdio.h>
#include<string.h>
int NumberTrans(char *pInputStr, int StrLength, char *pOutputStr)
{
int i,j=0,k=0;
char pOutputStr_Reverse[20]; //逆向存放輸出數組
for(i=StrLength;i>=0;--i) //逆向輸出是爲了解決Double問題
{
switch (pInputStr[i])
{
case 'O':pOutputStr_Reverse[j++]='1';break;
case 'T':pOutputStr_Reverse[j++]=(pInputStr[i+1]=='w')?'2':'3';break;
case 'F':pOutputStr[j++]=(pInputStr[i+1]=='o')?'4':'5';break;
case 'S':pOutputStr_Reverse[j++]=(pInputStr[i+1]=='i')?'6':'7';break;
case 'E':pOutputStr_Reverse[j++]='8';break;
case 'N':pOutputStr_Reverse[j++]='9';break;
case 'D':
if(j==0 || pInputStr[i+6]=='D') //如果Double在最後或者連續兩個Double,則返回1
return 1;
else
pOutputStr_Reverse[j++]=pOutputStr_Reverse[j-1]; //連續兩個輸出一樣
break;
case '0':return 1;break;
case '1':return 1;break;
case '2':return 1;break;
case '3':return 1;break;
case '4':return 1;break;
case '5':return 1;break;
case '6':return 1;break;
case '7':return 1;break;
case '8':return 1;break;
case '9':return 1;break;
default:break;
}
}
pOutputStr_Reverse[j]='\0';
for(i=j-1;i>=0;--i)
pOutputStr[k++]=pOutputStr_Reverse[i]; //正向輸出結果
pOutputStr[k]='\0';
}
int main(void)
{
char pInputStr[20],pOutputStr[20];
int StrLength,flag=0;
printf("Input the numbers:\n");
gets(pInputStr);
StrLength=strlen(pInputStr);
flag=NumberTrans(pInputStr,StrLength,pOutputStr); //flag用於判斷是否輸入字符合法
if(flag==1) //非法返回值
puts("ERROR");
else
puts(pOutputStr);
return 0;
}