若有如下程序: int main() { char str[]="abc",*ps=str; while(*ps) ps++; for(ps--;ps-str>=0;ps--) puts(ps); return 0; } 执行后输出的结果是( )。
时间: 2024-03-17 22:45:22 浏览: 159
该程序的输出结果是:
```
c
bc
abc
```
解释如下:
1. `ps`指向`str`的首元素`'a'`,进入while循环;
2. `ps`依次指向`'b'`和`'c'`,当指向`'\0'`时退出循环;
3. `ps--`操作使`ps`指向`'c'`,进入for循环;
4. `puts(ps)`输出`'c'`,`ps--`操作使`ps`指向`'b'`;
5. `puts(ps)`输出`"bc"`,`ps--`操作使`ps`指向`'a'`;
6. `puts(ps)`输出`"abc"`,`ps--`操作使`ps`指向`str`的前一个位置,此时`ps-str`的值为-1,不满足循环条件,退出循环。
相关问题
#include<string.h> int my_strlen(char* str) { int count = 0; while (*str != '\0'); { count++; str++; } return count; } int main() { char arr[] = "abc"; int len = my_strlen(arr); printf("%d\n", len); return 0; }
这段代码实现了一个自定义的字符串长度计算函数`my_strlen`,它通过循环遍历字符串中的每个字符,统计字符的数量来计算字符串的长度。具体实现过程如下:
1. 在`my_strlen`函数中定义一个整型变量`count`,并将其初始化为0,用于统计字符串中字符的数量。
2. 使用`while`循环遍历字符串中的每个字符,直到遇到字符串的结束符`\0`为止。
3. 在循环体中,每遍历一个字符,就将`count`变量的值加1,并将指针`str`向后移动一个字符,以便下一次循环遍历下一个字符。
4. 循环结束后,将统计得到的字符数量`count`作为函数返回值。
5. 在`main`函数中定义一个字符数组`arr`,并将其初始化为字符串"abc"。
6. 调用`my_strlen`函数并将`arr`作为参数传入,得到字符串的长度并赋值给整型变量`len`。
7. 使用`printf`函数输出字符串的长度`len`。
8. 返回0表示程序正常结束。
需要注意的是,在原代码中,`while`循环的条件语句后多了一个分号`;`,这会导致循环体内的代码无法执行,从而导致程序输出的结果不正确。因此,需要将分号去掉,修改为如下代码:
```
while (*str != '\0')
{
count++;
str++;
}
```
实现以下函数 char *my_strcpy(char *dest,char const *src); char *my_strncpy(char *dest,char const *src,int len); char *my_strcat(char *dest,char const *src); char *my_strncat(char *dest,char const *src,int len); int my_strcmp(char *str1,char const *str2); int my_strncmp(char *srr1,char const *str2,int len);
下面是实现上述函数的示例代码:
```c
#include <stdio.h>
char *my_strcpy(char *dest, char const *src) {
char *temp = dest;
while ((*dest++ = *src++))
;
return temp;
}
char *my_strncpy(char *dest, char const *src, int len) {
char *temp = dest;
while (len > 0 && (*dest++ = *src++)) {
len--;
}
if (len > 0) {
*dest = '\0';
}
return temp;
}
char *my_strcat(char *dest, char const *src) {
char *temp = dest;
while (*dest) {
dest++;
}
while ((*dest++ = *src++))
;
return temp;
}
char *my_strncat(char *dest, char const *src, int len) {
char *temp = dest;
while (*dest) {
dest++;
}
while (len > 0 && (*dest++ = *src++)) {
len--;
}
if (len > 0) {
*dest = '\0';
}
return temp;
}
int my_strcmp(char *str1, char const *str2) {
while (*str1 && (*str1 == *str2)) {
str1++;
str2++;
}
return *(unsigned char *)str1 - *(unsigned char *)str2;
}
int my_strncmp(char *str1, char const *str2, int len) {
while (len > 0 && *str1 && (*str1 == *str2)) {
str1++;
str2++;
len--;
}
if (len == 0) {
return 0;
}
return *(unsigned char *)str1 - *(unsigned char *)str2;
}
int main() {
char dest[100] = "Hello";
char src[] = "World";
printf("strcpy: %s\n", my_strcpy(dest, src));
char dest2[100] = "Hello";
printf("strncpy: %s\n", my_strncpy(dest2, src, 3));
char dest3[100] = "Hello";
printf("strcat: %s\n", my_strcat(dest3, src));
char dest4[100] = "Hello";
printf("strncat: %s\n", my_strncat(dest4, src, 3));
char str1[] = "abc";
char str2[] = "abc";
printf("strcmp: %d\n", my_strcmp(str1, str2));
char str3[] = "abcd";
char str4[] = "abce";
printf("strncmp: %d\n", my_strncmp(str3, str4, 3));
return 0;
}
```
上述代码演示了如何实现 `my_strcpy`、 `my_strncpy`、 `my_strcat`、 `my_strncat`、 `my_strcmp` 和 `my_strncmp` 函数。你可以根据需要调用这些函数,并根据具体的参数和返回值进行相应的操作。
阅读全文