用户首先输入一句英文诗,最长100个单词,每个单词最多100个字母,均为小写字母,中间不包含标点符号,以英文句号'.'结尾。接着用户输入两个数字n和k。
把该英文句子中的第n个单词采用上题中的加密方法(就是按照字母表向后数第k个字母,到结尾循环到开头)加密输出。
输入:
every time when you pass by
you take my breath away.
10
2
输出:
dtgcvj
提示:
1.输入的英文句子可以考虑用指针数组存储,动态申请内存(实在没掌握开大二维数组也行!)。
2.可以用上题的程序做一个函数本题使用。
3.注意英文诗句的最后一个单词不包含句号'.',句号只是作为提示诗句结束使用。
可能用到的函数:
strlen 求字符串长度
strcpy 拷贝字符串
以上是原题,加密的函数我已编出,我刚刚学c++,学到函数与指针,答案中不希望出现较高级的语法
C++ç¨åºï¼
#include<iostream.h>
#define MAX 101
void encrypt(char *source, int n, int k, char *dest);
void main()
{
char source[MAX]; //è±æè¯å¥
int n, k;
char dest[MAX]; //å å¯åå 容
gets(source);
cin>>n>>k;
encrypt(source, n, k, dest);
cout<<"before encrypt : "<<source<<endl;
cout<<"after encrypt : "<<dest<<endl;
return 0;
}
void encrypt(char *source, int n, int k, char *dest)
{
int i, j;
int count;
i = 0;
count = 0;
while(count<n-1)
{
for(;*(source+i)!=' ' && *(source+i)!='.'; i++);
if(*(source+i)!='.')
count++;
for(;*(source+i)==' ' && *(source+i)!='.'; i++);
}
for(j=0; *(source+i)!=' ' && *(source+i)!='.'; j++,i++)
{
*(dest+j) = *(source+i);
if(*(dest+j)>='a' && *(dest+j)<='z')
{
*(dest+j) = (*(dest+j) - 97 + k ) % 26 + 97;
}
else if(*(dest+j)>='A' && *(dest+j)<='Z')
{
*(dest+j) = (*(dest+j) - 65 + k ) % 26 + 65;
}
else
{
*(dest+j) += k;
}
}
*(dest+j) = '\0';
}
è¿è¡æµè¯ï¼