编写一个函数judge,判断字符串s1(长度小于10)是否是字符串s2(长度小于10)的子串。如果s1是s2的子串,函数返回0;否则,返回-1。
样例输入:
asdfg
eeirasdfgdskjfsasdfgjkeuoi
样例输出:
0
#include
using namespace std;
bool judge(const string &a,const string &b)
{
int i,j;
if(a.length()<b.length())
{
return false;
}
for(i=0;i<a.length();i++)
{
for(j=0;j<b.length();j++)
{
if(a[i+j]!=b[j])
{
break; // 字符不相等,退出
}
}
if(j==b.length()) // 达到了b.length,说明字符全部相等
{
return true;
}
}
return false;
}
int main()
{
string A,B;
while(cin >>B>>A)
{
if(judge(A,B))
{
cout <<0 << endl;
}
else
{
cout << -1<< endl;
}
}
return 0;
}
用sub子串替换长串src内第一次出现的obj子串。完成该函数的编写。注意:sub串与obj串的长度不一定相等。提示:
可使用的库函数 char *strstr(char *str1, const char str2);
返回str1中str2的第一次出现。charstrncpy(chardest,charsrc,size_t n);将src中前n个字符拷贝到dest指向的空间。char *strcat(char *dest,char *src);将src指向的字符串链接到dest指向的字符串后面。unsigned int strlen(char *s);获取字符串s的长度并返回。
样例输入:
abcdefxyzgklmnxyzghi
样例输出:
abcdefghigklmn
/*--------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main和其它
函数中的任何内容,不要修改或删除“Program”和
“End”两行注释,仅在其中填入所编写的代码。
------------------------------------------------*/
#include
#include
using namespace std;
int main()
{
int j,cnt,de=0;
char src[1000];
cin.getline(src, 999);
int l1=strlen(src);
char obj[50];
cin.getline(obj, 49);
int l2=strlen(obj);
char sub[50];
cin.getline(sub, 49);
int l3=strlen(sub);
for(int i=0;i<l1;i++)
{
if(src[i]==obj[j])
{
for(int k=0;k<l2;k++)
{
if(src[i+k]==obj[k])
{
de=i+k;
cnt++;
}
}
if(cnt==l2)
{
break;
}
}
}
for(int m=0;m<=de-l2;m++)
{
cout<<src[m];
}
for(int m=0;m<l3;m++)
{
cout<<sub[m];
}
for(int m=de+1;m<l1;m++)
{
cout<<src[m];
}
return 0;
}
下面函数strdelstr从字符串s中删除所有字符串t,并返回删除t后的新的字符串s。如s指向"abcdbcd",t指向"bc",则执行该函数后,s指向的字符串变成 “add”,完成该函数的编写,可以使用
样例输入:
abcdbcd
样例输出:
add
#include
#include
using namespace std;
int main()
{
int a[10];
int de,df=0;
char s[30];
cin>>s;
int l1=strlen(s);
char t[4];
cin>>t;
int l2=strlen(t);
for(int i=0;i<l1;i++)
{
if(s[i]==t[0])
{ int k=0;
for(int j=0;j<l2;j++)
{
if(s[i+j]==t[j])
{
df=i+j;
k++;
}
}
if(k==l2)
a[de]=df;
de++;
}
}
int g=0;
for(int h=0;h<l1;h++)
{
if(h==a[g]-l2+1)
{
h=h+l2;
g++;
}
cout<<s[h];
}
return 0;
}
试编写一个判断6位密码是否正确的函数codec,若密码正确返回1,密码不正确返回0,出现错误返回-1。密码规则是:第i位数字是第i-1位数字加1后的3次方的个位数(2<=i<=6)。
比如:密码272727中第2位的’7’是第1位的’2’加1后的3次方的个位数((2+1)的3次方为27,其个位数为7),第3位的’2’是第2位的’7’加1后的3次方的个位数((7+1)的3次方为512,其个位数为2),以此类推。
输入用例:
272727
输出用例:
密码正确!
#include
using namespace std;
//若字符是0-9之间的字符,则将其转换为对应的整数值并返回,
//否则,返回-1。
int char2int(char c)
{
int result;
if ((c>='0') && (c<='9'))
{
result = c-'0';
}
else
{
result = -1;
}
return result;
}
//判断6位密码是否正确,若正确返回1;不正确返回0,密码格式有错返回-1。
int codec(char code[])
{
int result = 1;
int i, k=0;
int a[6];
for (i=0; i<6; i++)
{
a[i] = char2int(code[i]);
}
for (i=0; i<6; i++)
{
if (a[i]==-1)
{
result = -1;
}
}
int flag=1;
for(int j=1;j<6;j++)
{
if(a[j]!=(((a[j-1]+1)*(a[j-1]+1)*(a[j-1]+1))%10))
{
flag=0;
}
}
if(flag==1)
{
result=1;
}
else
{
result=0;
}
return result;
}
int main()
{
int isCorrect = 0;
char str[7];
for (int i=0; i<6; i++)
{
cin>>str[i];
}
isCorrect = codec(str);
if (isCorrect==1) cout << "密码正确!" << endl;
else if (isCorrect ==0) cout << "密码不正确!" << endl;
else cout << "输入密码不符合规则!" << endl;
}
函数void sort(char a[][100], int len);对二维字符数组中的字符串按字典顺序从小到大排序,编写该函数。
样例输入:
dsfs
sdfa
sdfsdf
sdfb
sdfc
样例输出:
dsfs
sdfa
sdfb
sdfc
sdfsdf
#include
#include
#include
using namespace std;
void sort(char a[][100], int len)
{
char ch[100];
int i,j;
bool flag=1;
for(int i=0;i<len-1&&flag;i++)
{
flag=0;
for(int j=0;j<len-i;j++)
{
if(strcmp(a[j],a[j+1])>0)
{
strcpy(ch,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],ch);
flag=1;
}
}
}
}
int main()
{
char ch[5][100];
int i;
for(i=0;i<5;i++)
{
cin>>ch[i];
}
sort(ch,5);
for(i=0;i<5;i++)
{
cout<<ch[i]<<endl;
}
}
实现将无符号整数num的各位数字之间插入字符’-‘输出。
例如,如果num为1234,则输出为1-2-3-4。
说明:参数out为输出流,其使用方式与标准输出流cout一样,
例如,语句out<
最后再输出字符’-'和4。
样例输入:
1234
样例输出:
1-2-3-4
#include
using namespace std;
void convert(ostream &out, unsigned long x)
{
int n,m,i,flag=0;
int a[100];
n=x;
m=x;
while(n!=0)
{
a[i]=n%10;
i++;
n=n/10;
}
if(flag==0)
{
cout<<a[i-1];
flag=1;
}
if(flag==1)
{
for(int j=i-2;j>=0;j--)
{
cout<<"-"<<a[j];
}
}
}
int main ( )
{
unsigned long x;
cin>>x;
convert(cout, x);
cout << endl;
return 0;
}
编写函数,把一个数字字符组成的字符串转换为相应的整数(如 “1234” 转换为 1234)。
测试举例
样例输入:“1234”
样例输出:1234
#include
using namespace std;
int a2i(char s[])
{
int v=0,i=1;
while(s[i]!='"')
{
v=v*10+s[i]-'0';
i++;
}
return v;
}
int main()
{
char str[50];
cin>>str;
cout<<a2i(str)<<endl;
}
用sub字符串替换长串src内出现所有的obj子串。
注意:sub串与obj串的长度不一定相等。
提示:可使用库函数strcpy, strncmp, strncpy。
strcpy函数:strcpy(char ds[], char ss[]),作用是把ss字符串复制给ds指向的内存区域。
strncmp函数:int strncmp (char ds[], char ss[], int len), 作用是比较ds串和ss串中的前面len个字符,如果相同返回0,如果ds
样例输入:
abcde
bc
lk
样例输出:
alkde
#include
#include
using namespace std;
int main()
{
int a[10],b[10];
int j,de,f,e=0;
char src[1000];
cin.getline(src, 999);
int l1=strlen(src);
char obj[50];
cin.getline(obj, 49);
int l2=strlen(obj);
char sub[50];
cin.getline(sub, 49);
int l3=strlen(sub);
for(int i=0;i<l1;i++)
{
if(src[i]==obj[0])
{ int cnt=0;
for(int k=0;k<l2;k++)
{
if(src[i+k]==obj[k])
{
de=i+k;
cnt++;
}
}
if(cnt==l2)
{
a[f]=de;
f++;
}
}
}
int h=0;
for(int m=0;m<l1;m++)
{
if(m==a[h]-l2+1)
{
for(int p=0;p<l3;p++)
{
cout<<sub[p];
}
h++;
m=m+l2-1;
}
else
{
cout<<src[m];
}
}
return 0;
}
一个长度不超过255的字符串前后各有若干个无用的空格,编写函数stringBlank,将该字符串前后的无用空格去除。
说明:允许字符串之间出现空格。
样例输入:
apple is good (注释:尾部有空格)
样例输出:
apple is good(注释:此时尾部无空格)
#include
#include
#include
using namespace std;
int main()
{
char string[256], *pStr;
pStr = string;
int i,j=0;
/* 从键盘获取一个字符串,字符串中可含空格,以回车表示结束;*/
cin.getline(string,256);
int len=strlen(string);
for(i=0;i<len;i++)
{
if(string[i]!=' ')
{
break;
}
}
for(j=len-1;j>=i;j--)
{
if(string[i]!=' ')
{
break;
}
}
for(int m=i;m<=j;m++)
{
cout<<string[m];
}
return 0;
}
针对输入字符串的加密规律是:对字符串的每个字母以该字母后面第4个字母加以替换。例如,字母’A’后面第4个字母是’E’,用’E’代替’A’。因此,“China"应译为"Glmre”,
注意:‘W’后面的第4个字母是’A’,‘X’后面的第4个字母是’B’。‘Y’后面的第4个字母是’C’,‘Z’后面的第4个字母是’D’。(小写字母与大写字母处理相类似)
样例输入:
aVwpFz
样例输出:
eZatJd
#include
#include
using namespace std;
int main()
{
char s[10];
cin >> s;
int len=strlen(s);
for(int i=0;i<len;i++)
{
if('a'<=s[i]&&s[i]<='v')
{
cout<<(char)(s[i]+4);
}
else if('A'<=s[i]&&s[i]<='V')
{
cout<<(char)(s[i]+4);
}
else if('w'<=s[i]&&s[i]<='z')
{
cout<<(char)(s[i]-22);
}
else if('W'<=s[i]&&s[i]<='Z')
{
cout<<(char)(s[i]-22);
}
}
return 0;
}
去掉字符串 s 中的字符 a,并将新得到的字符串返回
#include
#include
using namespace std;
int main()
{
int i;
char s[100],c = 'a';
cin>>s;
int len=strlen(s);
for(int i=0;i<len;i++)
{
if(s[i]!='a')
{
cout<<s[i];
}
}
cout<<endl;
return 0;
}
将字符串s中的所有字符逆序存放,例如s中为”abc”时,调用该函数后s中的字符串变为”cba”,完成该函数。
样例输入:
abc
this
OK
样例输出:
cba
siht
KO
#include
#include
using namespace std;
int main()
{
char s[200];
int i;
for (i=0;i<3;i++)
{
cin>>s;
int len=strlen(s);
for(int i=len-1;i>=0;i--)
{
cout<<s[i];
}
cout<<endl;
}
return 0;
}
对 n 个字符串按字母序排序(首字母相同则顺序比较下一个字母)。
提示:可以使用 strcmp 函数。int strcmp(const char *s1, const char *s2) 若 s1 和 s2 相同则返回 0,若 s1 大于 s2 则返回大于 0 的值, 若 s1 小于 s2 则返回小于 0 的值。
测试举例
样例输入:Accd bsx akde bsxc abcd
样例输出:Accd abcd akde bsx bsxc
#include
#include
using namespace std;
int main()
{
string str[80], temp;
int i, j, n;
n=5;
for (i=0; i<n; i++)
{
cin>>str[i];
}
for (i=0; i<n; i++)
{
for (j=i+1; j<n; j++)
{
if (str[i]>str[j])
{
temp=str[i], str[i]=str[j], str[j]=temp;
}
}
}
for (i=0; i<n; cout<<str[i++]<<" ");
system("pause");
return 0;
}
函数char *dels(char *s, char *c);去掉字符串s中的子字符串c,并将新得到的字符串返回,完成该函数(不考虑去掉子字符串c后形成的新的子字符串c)。例如s为”abcabcd”,c为”bc”,则调用该函数后,s为”aad”。
样例输入:
abcdefghiabc
样例输入:
abc
样例输出:
defghi
#include
#define N 100
/**
删除在长串中指定的字符串。
str1: 长串地址
str2: 指定字符串地址
str: 结果字符串地址
**/
void deleteSub(const char * str1, const char * str2, char * str)
{
// 变量,用于各自数组下标
int idx1 = 0;
int idx2 = 0;
int idx = 0;
// 遍历str1数组,匹配是否与str2数组相同。
while(str1[idx1] != '\0')
{
while(str2[idx2] != '\0')
{
// 相同情况,str1 和 str2 下标自增,直到满足全部相同,此时将 str2 下标置0,匹配str1 之后的元素
// 不相同时,直接跳出匹配,进行str1 下一元素匹配,并且将不匹配元素存入str 中。
if(str2[idx2] == str1[idx1])
{
idx1 ++;
idx2 ++;
if(str2[idx2] == '\0')
{
idx2 = 0;
break;
}
}
else
{
idx2 = 0;
str[idx]=str1[idx1];
idx ++;
idx1 ++;
break;
}
}
}
//字符串结束
str[idx]='\0';
}
int main(void)
{
char str[N],substr[N],resultstr[N];
scanf("%s %s",str,substr);
deleteSub(str,substr,resultstr);
printf("%s",resultstr);
return 0;
}