字符串基本概念

来源:互联网 发布:corel 片头制作软件 编辑:程序博客网 时间:2024/06/10 07:42
编程训练营讲义  作者:巧若拙字符串专题讲义专题一 字符串基本概念1.下列字符数组或字符串定义合法的是(  ABCD   )A  char str1[6]={'a','p','p','l','e'};           B  char str2[6]={'a','p','p','l','e','\0'};C  char str3[6]="apple";                 D  char str4[]="apple";2.下列说法正确的是(  C   )A  字符的大小顺序按其ASCII代码的大小而定,所有字符’a’小于字符’b’,字符’d’小于字符’D’;B  字符串”abc”的长度是3,其所占空间为3个字节;C  定义字符数组char str[10]; 则输入和输出字符串的语句分别为scanf("%s", &str); 和printf("%s", str);D  分别使用scanf("%s", s1);和gets(s2);从键盘读入字符串,对于相同的输入hello world。s1获取的结果仅仅是 hello,而s2获取的结果是hello world。3. 下列代码段正确的是(  D   )A  char str3[4]="apple";B  char *str3[6]="apple";C  char str1[20];  char str2[10]="apple";  str1 = str2;D  char *str1;  char str2[10]="apple";  str1 = str2;4.根据如下代码段,填写屏幕输出:char str1[6]={'a','p','p','l','e','\0'};char str2[10]="apple";char str3[]="apple";char *str4="apple";cout << sizeof(str1) << " " << strlen(str1) << " ";    cout << sizeof(str2) << " " << strlen(str2) << " ";   cout << sizeof(str3) << " " << strlen(str3) << " ";    cout << sizeof(str4) << " " << strlen(str4) << " ";    cout << *str4 << " " << str4 << endl;   屏幕输出为:  6  5  10  5  6  5  4  5  a  apple   。5.说明下列常见字符串函数的功能和调用方法:① char *strcpy(char *destination, const char *source);② char *strncpy(char *destination, const char *source, int n);③ char *strcat(char *str1, const char *str2);④ int strcmp(const char *str1, const char *str2);⑤ int strlen (char *str);⑥ char *strchr(char *str, char c);⑦ char *strstr(const char *str1, const char *str2);⑧ char *strlwr(char *str);⑨ char *strupr(char *str);① char *strcpy(char *destination, const char *source);函数strcpy()将source指向的字符串(包括末尾的空字符)复制到destination指向的位置,返回值为destination。注意要保证destination所指向的位置已经分配好足够的空间。② char *strncpy(char *destination, const char *source, int n);函数strncpy()与strcpy()类似,该函数最多将source中的前n个字符串复制到destination中。如果source中包含的字符少于n个,则在后面加上足够数量的空字符;如果source中包含的字符多于n个,则不在destination的末尾添加空字符,需要程序员自己为destination手动添加空字符,代码为destination[n] = ‘\0’。③ char *strcat(char *str1, const char *str2);函数strcat()将str2加到str1的后面,并将空字符移到新字符串的末尾,返回值为str1。注意要保证str1所指向的位置已经分配好足够的空间。还有一个类似的函数char *strcat(char *str1, char *str2, int n);如果str2包含的字符多于n个,则前n个字符被加到str1的后面;如果少于n个,则将str2的所有字符都加到str1的后面。无论哪种情况,都将在拼接得到的字符串后面加上空字符。④ int strcmp(const char *str1, const char *str2);函数strcmp()逐字符地对两个字符串进行比较,返回一个整数:若str1小于str2,返回值小于0; 若str1等于str2,返回值等于0; 若str1大于str2,返回值大于0。还有一个类似的函数int strncmp(const char *str1, const char *str2, int n);对字符串str1和str2的前n个字符串进行比较。比较将不断进行下去,直到比较了n个字符或者达到字符串的末尾。⑤ int strlen (char *str);函数strlen ()返回str所指的位置和下一个空字符之间的字符数(不包括空字符)。⑥ char *strchr(char *str, char c);函数strchr ()查找字符在字符串中第一次出现的位置,它在str中从左到右进行查找,直到找到字符c或者达到结尾的空字符。如果找到c,则返回一个指向该字符的指针,否则返回NULL。还有一个类似的函数char *strrchr(char *str, char c); 查找字符在字符串中最后一次出现的位置。⑦ char *strstr(const char *str1, const char *str2);函数strstr ()查找字符串str2在字符串str1中第一次出现的位置。函数返回一个指针,如果找到匹配的子字符串是,指向其第一次出现的位置,否则返回NULL。如果str2的长度为0,则函数返回str1。⑧ char *strlwr(char *str);函数strlwr()将str中所有的大写字母转换为小写字母,并返回指针str。⑨ char *strupr(char *str);函数strupr ()将str中所有的小写字母转换为大写字母,并返回指针str。6.大小写字母互换 描述:把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母。输入:输入一行:待互换的字符串。输出:输出一行:完成互换的字符串(字符串长度小于80)。样例输入If so, you already have a Google Account. You can sign in on the right. 样例输出iF SO, YOU ALREADY HAVE A gOOGLE aCCOUNT. yOU CAN SIGN IN ON THE RIGHT.7. 配对碱基链 描述:脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。而构成DNA的碱基共有4种,分别为腺瞟呤(A)、鸟嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。我们知道,在两条互补碱基链的对应位置上,腺瞟呤总是和胸腺嘧啶配对,鸟嘌呤总是和胞嘧啶配对。你的任务就是根据一条单链上的碱基序列,给出对应的互补链上的碱基序列。输入:一个字符串,表示一条碱基链。这个字符串只含有大写字母A、T、G、C,分别表示腺瞟呤、胸腺嘧啶、鸟嘌呤和胞嘧啶。字符串长度不超过255。输出:一个只含有大写字母A、T、G、C的字符串,为与输入的碱基链互补的碱基链。样例输入ATATGGATGGTGTTTGGCTCTG样例输出TATACCTACCACAAACCGAGAC8.找第一个只出现一次的字符 描述:给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。输入:一个字符串,长度小于100000。输出:输出第一个仅出现一次的字符,若没有则输出no。样例输入abcabd样例输出C9. 字符串移位包含问题 描述:对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。输入:一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。输出:如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。样例输入AABCD CDAA样例输出true