C++程序:
#include
#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 : "<
#include
#include
/*
需求1:字符窜输入,输入完整,分段输入
定义两个派散字符串数组a b;
a用来接收输入的字符串(子函数变量),b用来整合输入的字符串(主函数变量)
对字符串进行检索,若有非小写字母则重新输入字符串,则重新输入。
没有则将字符串复制到b中。 检索b中得倒数第二的字符是否为'.'
若不为'.'则继续输入
若为'.'则进行以下操作
作为主函数变量:定义int型数intt【100】
检测字符串数组将每个单词的首字母位置下标赋值给mark【100】;
需求2:字符串的检索
定义数组c[100]
输入n找到第n个单词,将字符输出到c中,在对c进行加密输出
*/
void StringCin(char *bp/*接收char型字符串数组首地址*/,int *inttp/*接收一个iint型数组首地址,放入每个单词首字母对应的下标*/)
{
//贺拦完成对字符串的检测,完成了字符串的输入
char a[10100];//考虑到每个单词之间有一个间隔指定一个空格共有100个所以定义为1000个
int i=0/*用来对a中得字符串进行检索*/,j=0/*用来指向第一个没有被赋值的*bp[]*/禅羡胡,end=0/*用来判断输入是否结束*/;
do{
cin>>a;
for(i=0;a[i]!='\0';i++)
{
if(a[i]不为小写字母且'.')
{ cout<<"输入错误"<
end=1;
}
if(end==0)
{
// 将字符串复制到*bp中(从bp[j]开始),最后一个'\0'换成空格
strcpy(&bp[j],a);
j=strlen(a)+j;
bp[j++]=' ';
}
}
while(end==0);
//对每个单词建立检索
//把单词的第一个字母对应的下标添入inttp
int intttp=0; //inttp[]的下标
inttp[intttp++]=0;
for(int k=0;k!='.';k++)
{
if(bp[k]==' '&&bp[k+1]!=' ')
inttp[intttp++]=k+1;
}
}
char* return_string(int n/*返回第n个字符串*/,char *bp,char *inttp)
{
n=n-1; //转换成下标值
int bip=inttp[n]; //找到对应的单词下标
char word[100];
for(;bp[bip]!='\0';bip++)
word[bip-inttp[n]]=bp[bip];
word[bip-inttp[n]]=bp[bip];
return word;
}
void main()
{
char b[10100];
int intt[100],n;
char word[100];
StrintCin(b,intt);
cout<<"输入字符串完毕,请输入编码的是第几个单词:";
cin>>n;
strcpy(word,return_string(n,b,intt));
/*至此在word[100]中有多得字符串*/
}
/*代码并为经过调试,把我这个代码看懂对你也是一种提高,好好学习吧!孩子*/
首先接收字符串用string :string str; cin>>str;用string的好处就是可以不用你管理内存分配
将分开的单唯或租词储存用vector
储存单词团圆:strVec.push("单词")或者strVec.push(string对象)。
分离单词可以利用string中的find函数,找指兆到空格然后跳过以此分离单词
至于你说的strlen什么的字符串操作那都是C中用的,过时了
#include"stdio.h"
#define N 10000
void jami(char str2[],int n,int k)
{
int i,j,num;
num=1;
if(n==1)
{
for(i=0;str[i]!=32;i++)
printf("%c",str[i]);
}
else
{
for(i=0;str2[i]!='\0';i++)
{
if(str2[i]==32)
num++;
if(num==n)
break;
}
//printf("%d",num);
for(j=i+1;str2[j]!=32;j++)
{
if(str2[j]-'a'+k>25)
{
str2[j]=str2[j]+k-25;
printf("%c",str2[j]);
}
else
{
str2[j]=str2[j]+k;
printf("%c",str2[j]);
}
}
}
printf("\n");
}写的简单,没用二维数组
void main()
{
char str[N];
int n,k,i=0;
printf("做改请输入一句英文诗,最长100个单词,每个单词最多100个字母,均为小写字母,中间不包含标点符号,以英绝弊文句号'纯宏判.'结尾")
for(i=0;i
scanf("%c",&str[i]);
if(str[i]=='.')
{
str[i]='\0';
break;
}
}
printf("%s\n",str),
scanf("%d%d",&n,&k);
jami(str,n,k);
}
加密算法 你还没说呢 按照字母表向后数第k个字母,到结尾循环到开头,然后呢?与原字母相与?