黑马程序员技术交流社区
标题:
小白C语言字符串问题求解答
[打印本页]
作者:
Aliu
时间:
2016-4-14 21:49
标题:
小白C语言字符串问题求解答
1,下面程序的输出是什么?
#include <stdio.h>
main () {
char s[] = "Hsjodi", *p;
for ( p = &s[5] ; p >= s ; p-- ) --*p ;
puts (s) ;
return 0 ;
}
复制代码
2,函数如下所示:
int f (char *s, char *t) {
char *p1 ,*p2;
for(p1 = s ; *p1 ; p1++) {
for(p2 = t ; *p2 ; p2++)
if (*p1 == *p2) break ;
if (*p2 == '\0') break ;
}
return p1 - s ;
}
复制代码
(a)f("abcd","babc")的值是多少?
(b)f("abcd","bcd")的值是多少?
(c)通常情况下,当传递两个字符串s和t时,函数的返回值是什么?
想了半天想不出来有大神告诉我吗?
作者:
落寒
时间:
2016-4-15 10:39
char s[] = "Hsjodi", *p;
// 循环对数组的地址进行遍历,并用p指针去指向遍历的地址,循环体中--*p是已经做了计算后的值,
// 比如说 H-1 = G, 这样数组的每一个字符减1,所以字符数组已经发生了改变,最终输出结果为Grinch
for ( p = &s[5] ; p >= s ; p-- ) --*p ;
puts (s) ;
复制代码
作者:
落寒
时间:
2016-4-15 10:42
第二个问题的:
int f (char *s, char *t) {
char *p1 ,*p2;
for(p1 = s ; *p1 ; p1++) {
// p1 依次指向字符串的字符地址,p1 = s 是从s的首地址开始
for(p2 = t ; *p2 ; p2++){
// 如果*p1和*p2相等,跳出循环,也就是p1指向的字符与p2指向的字符相等,循环结束
if (*p1 == *p2) break ;
}
// 如果p2指向t字符串的结束符'\0',跳出循环
if (*p2 == '\0') break ;
}
// 返回的结果是p1指向s字符串的字符地址与首地址的间隔
// 一般情况s字符串的首字母没有在t字符串中出现,则返回0
return p1 - s ;
}
复制代码
问题:
f("abcd","babc")的值是3
f("abcd","bcd")的值是0
作者:
Aliu
时间:
2016-4-15 12:45
落寒 发表于 2016-4-15 10:42
第二个问题的:
多谢了,能看懂了,尤其是第二个,论坛里高手多啊!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2