下列程序中的函数 strcpy2() 实现字符串两次复制 , 即将 t 所指字符串复制两次到 s 所指内存空间中 ,合并形成一个新的字符串。例如,若 t 所指字符串为 efgh ,调用 strcpy2 后, s 所指字符串为 efghefgh 。请填空。
#include <stdio.h>
#include <string.h>
void strcpy2(char *s,char *t)
{ char *p=t;
while(*s++=*t++);
s= 【 1 5 】 ;
while( 【 1 6 】 =*p++);
}
main()
{ char str1[100]="abcd",str2[]="efgh";
strcpy2(str1 ,str2); printf("%s\n",str1);
}
●试题五
阅读以下程序说明和C程序,将应填入(n)处的子句,写在答卷纸的对应栏内。
【程序说明】
函数int commstr(char *str1,char *str2,int *sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。约定空串不作为公共子串。
函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。如果字符串str1和str2没有公共子串,约定最长公共子串的个数和最长公共子串的长度均为0。
【程序】
int strlen(char *s)
{char *t=s;
while(*++);
return t-s-1;
}
intcommstr(char)*str1,char *str2,int *sublen
{char*s1,*s2;
int count=0,len1,len2,k,j,i,p;
len1=strlen(str1);
len2=strlen(str2);
if(len1>len2)
{s1=str1;s2=str2;}
else{len2=len1;s1=str2;s2=str1;}
for(j=len2;j>0;j--)/*从可能最长子串开始寻找*
{for(k=0; (1) <=len2;k++)/*k为子串s2的开始位置*/
{for(i=0;s1[ (2) ]!='\0';i++;)/* i为子串s1的开始位置*/
{/* s1的子串与s2的子串比较*/
for(p=0;p<j)&& (3) ;p++);
if ( (4) )/*如果两子串相同*/
{for(p=0);p<j;p++}/*输出子串*/
printf("%c",s2[k+p]);
printf("\n");
count++;/* 计数增1*/
}
}
}
if (count>0)break;
*sublen=(count>0)? (5) :0;
return count;
}
●试题五
【答案】(1)k+j(2)i+j-1(3)s1[i+p]==s2[k+p](4)p==j或p>=j(5)j
【解析】略。
以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。void sstrcpy(char*s,char*t){while(*s++=);}main(){ char str1[100],str2[]="abcdefgh"; sstrcpy(str1,str2); printf("%s\n",strl);}
请编写一个函数int compare(char *s,char *t)), 该函数的功能是对两个字符串进行比较。当s所指字符串和t所指字符串相等时,返回值为0;当s所指字符串大于是t指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0。
注意:部分源程序已存在文件PROC8.cpp中。
文件PROC8.cpp的内容如下:
//PROC8.cpp
include <iostream>
include <string>
using namespace std;
int compare(char *s,char *t)
{
//* * * * * * * * *
}
int main ()
{
char str1[100],str2[100];
int result;
cout<<"Input the first string\n";
cin>>str1;
cout<<"Input the second string\n";
cin>>str2;
result=compare(str1,str2);
if (result==0)
cout<<"string1=string2 ! \n";
else if (result>0)
cout<<"string1>string2 ! \n";
else
cout<<"string1<string2 ! \n";
return 0;
}
执行语句序列
char strl[10]="ABCD",str2[10]="XYZxyz";
for (int i=0; strl[i]=str2[i]; i++)
后,数组str1中的字符是XYZxyz,数组str2中的字符串是【 】。
题目来自互联网:http://wenku.baidu.com/view/1b71537201f69e314332947f.html答案:自己做的,可能有错误,请多指正。 QQ:447872587C语言部分:语言部分一、简单编程,请用一句语句完成下列操作1.位操作:将变量unsigned long register的0,4,6位清032位下:register=0xffffffae分析:0,4,6清0;10101110对应着:1010对应a; 1110对应e2.字符串操作:判断字符串char* str1是否起始位置包含char* str2的内容if(strstr(str1,str2)==str1)3.内存操作:将指针unsigned char* ptr的内容向后移动4个字节*(ptr+4)=*ptr;4.将无符号变量unsigned int val进行字节序颠倒(val0x000000ff24)|( val0x0000ff008) |( val0x00ff00008)| ( val0xff00000024)二、写出下列程序的运行结果 32位1、指针变量:Unsignedchar*p1;Unsignedchar*p2;p1=(Unsigned char*)0x801000;p2=(Unsigned char*)0x810000;请问:p1+5=? p2+5=?p1+5=0x801000+5*4=0x801000+0x14=0x801014p2+5=0x810005+5*4=0x810000+0x14=0x8100142.算数运算Main(){Unsignedchar a,b,c,d;a=30;b=a++;c=++a;d=10*(a++);}请问:b=?c=?d=?b=30,c=32,d=32003、逻辑运算unsigned int regval = 0x451AD,evenMask= 0x306,bitConvert = 0xFF;int event = 0,convert = 0;event = regval bitConvert;convert = regval^ convert;请问:event=? Convert=?event= 260 Convert=282962分析:event=0x451AD0x306,0x 4 5 1 A D0x 3 0 6= 0x 0 0 1 0 4 即:16*16+4=260convert = 0x451AD ^ convert;三、请指出下列程序存在的问题,如何修正:1、说明:以下代码是把一个字符串倒序,如”abcd”倒序后变为”dcba”int _tmain(intargc, _TCHAR*argv[]){char*src = "hello,world";char *dest = NULL;intlen = strlen(src);char*dest = (char*)malloc(len);char*d = dest;char*s = src[len];while(len-- != 0){d++= s--;}printf("%s",dest);return0;}正确应该为:方法二:四、简答题:1、头文件的ifndef/define/endif干什么用的?防止头文件被重复引用2、定义函数局部变量的时候:Char array1[100];Char *array2;array1和array2都可以当做指针引用,这两个指针在使用的时候有什么区别?当做函数参数传递的时候,数组可以当指针用,本质就是取数组第一个元素的内存地址传过去,当数组作为函数参数传递的时,该数组自动退化为同类型的指针。指针也可以当数组用,但是两者的本质不一样;数组名对应着一块内存,而不是指向一块内存,其地址和容量在生命周期不变,但数组内容可以改变;指针可以随时指向任意的内存块,其特征是可变,常用指针来操作动态内存。五、内存问题:很简单,不详述。六、程序编写:编写一个函数,输入参数为一个字符串指针,将其中的大写变为小写
执行语句序列
char str1[10]="ABCD",str2[10]="XYZxyz";
for(int i=0;strl[i]=str2[i];i++);
后,数组strl中的字符串是______。
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
[函数2.1说明]
函数strcpy的功能是将字符串str2的内容复制到字符申str1。
[函数2.1]
(1) strcpy (char *slr1, const char *str2)
{ char * temp;
while( * str2!='\0') *cp++ =(2);
(3)='\0';
return str1;
}
[函数2.2说明]
函数int strcmp(const char *str1, const char *str2)的功能是按字典序比较两个字符串str1和str2的大小。当str1<str2时返回-1,当str1>str2时返回1,否则返回0。
[函数2.2]
int strcmp(const char *str1, const char *str2)
{ while( *str1= =* str2) {
if(* s1= =(4)) return 0;
s1++;
(5);
}
if( *str1<*str2) return -1;
return 1;
}
请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2接在字符串str1的后面。
例如:str1=“How do”,str2=“you do?”,结果输出: How do you do?
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
include<stdio.h>
include<conio.h>
define N 40
void fun(char*str1,char *str2)
{
int i=0;
char *pl=str1;
char*p2=str2;
while(【 】)
i++;
for(;【 】;i++)
*(p1+i)=【 】;
*(p1+i)='\0';
}
main()
{
char str1[N],str2[N);
clrscr();
printf("*****Input the string str1 & Str2*****\n");
printf("\nstr1:");
gets(str1);
printf("\nstr2:");
gets(str2);
printf("**The string str1 & str2**\n");
puts(str1);
puts(str2);
fun(str1,str2);
printf("*****The new string *****\n");
puts(str1);
}
请补充函数fun,该函数的功能是比较字符串str1和str2的大小,井返回比较的结果。
例如: 当str1=“cdef",str2=“cde”时,函数fun()返回“>”。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
include< stdio, h>
include<conio. h>
define N 80
char *fun (char *str1,char *str2)
{
char *p1=str1, *p2=str2;
while (*p1 & & *p2 )
{
if (【 】)
return "<";
if(【 】)
return ">";
p1++;
p2++;
}
if (*p1=*p2)
return "==";
if (*p1==【 】)
return "<";
else
return ">";
}
main()
{
char str1 [N], str2 [N];
clrscr ();
printf ("Input str1: \n");
gets (str1);
printf ("Input str2: \n");
gets (str2);
printf ("\n*****the result*****\n");
printf ("\nstr1 %s str2", fun (str1, str2) );
}
阅读以下程序说明和C程序,将应填入(n)处的子句,写在对应栏内。
【程序说明】
函数int commstr(char * str1,char * str2,int * sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。约定空串不作为公共子串。
函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。如果字符串str1和str2没有公共子串,约定最长公共子串的个数和最长公共子串的长度均为0。
【程序】
int strlen(char * s)
{char *t=s;
while( * ++);
return t-s-1;
}
int commstr(char) *str1,char *str2,int *sublen
{ char*s1, *s2;
int count=0,len1 ,len2,k,j,i,p;
len1:=strlen(str1)
len2 = strlen(str2);
if(len1>len2)
{s1=str1 ;s2=str2;}
else {len2 = len1;s1 = str2;s2 = str1;}
for(j=len2;j>0;j--) /*从可能最长子串开始寻找*/
{for(k=0;(1)<:len2;k++) /*k为子串s2的开始位置*/
{for(i=0;s1[(2)]!='\0';i++;) /*i为子串s1的开始位置*/
{ /*s1的子串与s2的子串比较*/
for (p=0;p<j)&&(3);p++);
if ((4)) /*如果两子串相同*/
{for(p=0);p<j;p++} /*输出子串*/
printf ("%c",s2[k+p]);
printf ("\n");
count++;/*计数增1 */
}
}
}
if (count>0) break;
*sublen=(count>0)?(5):0;
return count;
}