编写一个字符串连接函数str_cat(char s[],char s1[],char s2[]),完成s=s1+s2的字符串连接工作。具体要求为,先将字符串s1复制到s中,然后再将字符串s2连接到s后面。在主函数中定义三个字符串数组str[80]、str1[40]、str2[40],将两个字符串输入到str1与str2中,调用字符串连接函数str_cat(),将str1与str2连接到str中,最后输出连接后的字符串str。要求用两种方法编写str_cat()函数。方法一,用字符串复制与连接函数。方法二,用while语句编程实现。
输入实验数据:str1=”I am student” str2=”And You are student too”
char s1[20],s2[40];
cout<<"Input String1:\n";
cin.getline(s1,20);
cout<<"Input String2:\n";
cin.getline(s2,20);
对于stract无法输入空格的问题我不知道怎样解决
空格要手动输入。复制str1到str之后,在str中字符串最后,即"\0"那个地方替换成空格,然后在下一个地方再次输入"\0"就可以了。具体实现:strcpy(str,str1);n=strlen(str);str[n]=' 空格 ';str[n+1]='\0';strcat(str,str2);这样能保证链接后,两个字符串之间有空格。
什么意思?空格也可以作为字符粘贴,没问题。你是想删除第一个字符串末尾空格和下一个字符串开头的空格?这也有函数可用啊。
在第一个字符串后面粘一个空格,再粘第二个字符串。
我说的不是两个字符串之间的空格……
试一下“I am a student.”
输入时这字符串只能输到I,系统好像默认到空格就截止输入了,所以我输的第二个字符串根本就不用管了,因为输出连接后的是I am
你是用scanf("%s")读入字符串吧?在scanf读入时,将空格、TAB键、回车都作为输入结束符。
想读入带空格的一行字符串,可以用gets
#include<stdio.h>
void main()
{
char str[80];
gets(str);
printf("%s",str);
}
指针变量编写下列字符串处理函数:
字符串拼接函数,void str_cat( char *p1,char *p2){函数体}
字符串比较函数,int str_cmp( char *p1,*char *p2) {函数体}
取字符串长度函数,int str_len( char *p){函数体}
在主函数中输入两个字符串,对这两个字符串进行比较,并输出比较结果。然后将两个字符串进行拼接,输出拼接后的字符串及其长度。
实验数据:"Visual C++" ,"Visual Basic"
其实我今天做到这题也遇上同样困扰了:
int str_cmp(char *p1,char *p2)
{ while(*p1==*p2)
{p1++;
p2++;
}
if (*p1>*p2)
return 1;
else if (*p1==*p2)
return 0;
else
return -1;
}
void str_cat(char *p1,char *p2)
//将p2所指的字符串连接到p1所指的字符串串末尾
{ while(*p1++);
p1--;
while(*p2!=0)
*p1++=*p2++;
*p1=0;
}
int str_len(char *p)
{ int length=0;
while(*p!=0)
{ p++;
length++;
}
return length;
}
void main(void)
{ char s1[20],s2[40];
cout<<"Input String1:\n";
cin>>s1;
cout<<"Input String2:\n";
cin>>s2;
if (str_cmp(s1,s2)==1)
cout<<"String1>String2"< else if (str_cmp(s1,s2)== -1)
cout else
cout str_cat(s1,s2);
cout cout }
程序运行结果:
Input String1:
Visual C++
Input String2:
Visual Basic
String1>String2
String1+String2 =Visual C++ Visual Basic
String1 Length=23
看似结果应当如此吧,可是真正执行后却是把visual和 c++看成了两个串,我编出来的结果是9。。。