#include <stdio.h> #include <string.h> void strrev(char *p,char *q) { while(p<q) { int t=*p;*p=*q;*q=t; p++;q--; } } int main(int argc, const char *argv[]) { char str[]="good good study"; char *p=str; char *q=str+strlen(str)-1; strrev(p,q); p=q=str; while(*p!='\0') { while(*q!=' '&&*q!='\0') { q++; } char *k=q-1; strrev(p,k); while(*q==' ') q++; q=p; } puts(str); return 0; }
时间: 2024-04-20 13:24:09 浏览: 7
这段代码是用来颠倒字符串中每个单词的序的。它首先定义了一个函数`strrev`,用于颠倒字符串中给定区间的字符顺序然后在`main`函数中,它将字符串"good good study"储在字符数组`str`中。接着它使用指针`p`和`q`分别指向字符串的开头和结尾。
然后,它调用`strrev函数来颠倒整个字符串。接下来,它使用两个指针`p`和`q`来遍历字符串,找到每个单词的起始和结束位置,并调用`strrev`函数来颠倒每个单词的字符顺序。最后,它打印出颠倒后的字符串。
这段代码的输出结果应该是"doog doog yduts",也就是将原字符串中每个单词的顺序颠倒了。
相关问题
用指针写strrev函数
可以通过以下方式使用指针来实现strrev函数:
```c
#include <stdio.h>
#include <string.h>
void strrev(char *str) {
char *start = str;
char *end = str + strlen(str) - 1;
char temp;
while (start < end) {
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main() {
char str[] = "hello world";
printf("Before reversal: %s\n", str);
strrev(str);
printf("After reversal: %s\n", str);
return 0;
}
```
在上面的代码中,我们使用了两个指针start和end,分别指向字符串的开始和结束。在while循环中,我们交换这两个指针所指向的字符,直到它们相遇或者交错为止。这样,就完成了字符串的翻转。
K进制数的转换。输入非负整数a将其转换为K进制数,2 <= K <= 32。 K进制数使用的符号是0~9, A, ...V来表示(字母是大写) 输入:一个十进制非负整数a和一个正整数K, 2<=K<=32。空格分隔。 输出:K进制表示的整数。写出其对应的C语言代码
以下是将十进制数转换为K进制数的C语言代码:
```c
#include <stdio.h>
#include <string.h>
void convertToKBase(int num, int base, char *result) {
char symbols[] = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
int i = 0;
while(num > 0) {
result[i++] = symbols[num % base];
num /= base;
}
result[i] = '\0';
strrev(result);
}
int main() {
int num, base;
char result[100];
scanf("%d %d", &num, &base);
convertToKBase(num, base, result);
printf("%s", result);
return 0;
}
```
输入格式为:一个十进制非负整数a和一个正整数K,中间以空格分隔。程序将会输出转换后的K进制数。