c语言编程实现将一个字符串按逆序存放,填空后执行验证。
时间: 2024-05-02 19:17:32 浏览: 142
下面是一个实现将字符串按逆序存放的C语言程序:
```c
#include <stdio.h>
#include <string.h>
void reverse_string(char* str);
int main()
{
char str[100];
printf("请输入一个字符串:");
fgets(str, 100, stdin);
// 去掉换行符
str[strcspn(str, "\n")] = '\0';
reverse_string(str);
printf("按逆序存放后的字符串为:%s\n", str);
return 0;
}
void reverse_string(char* str)
{
int len = strlen(str);
int i, j;
char temp;
for (i = 0, j = len - 1; i < j; i++, j--)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
```
填空验证:
输入:hello world
输出:按逆序存放后的字符串为:dlrow olleh
相关问题
3-2 一个字符串,若其逆序排列与顺序排列同,则称其为“回文”。以下函数判别字符 s是否为回文,若是返回1,否则返回0。试填 请输入一字符串: abcdcba 空并编程实现 #include<stdio.h>#include<string.h> int fun(char *s) { char *p,*q; intn; n=strlen(s); for(p=s;p<=q;q--,- (2)) q=(1); if(*p!=*q) break; if(p<q) (3) else return (1);}
下面是关于如何完成该题目的详细介绍以及正确的代码实现。
### 程序功能说明
本程序的目标是编写一个函数 `fun`,用于判断给定的字符串是否为回文。如果是回文,则返回1;如果不是,则返回0。
---
### 分析与填空
#### 第一步:确定变量的作用范围及初始化
- **`q = (1);`**
这里的作用是指向字符串末尾字符的指针初始化。我们知道,在C语言中,`strlen(s)` 返回的是字符串的有效长度,而字符串数组是以`\0`结尾的。所以最后一个有效字符的位置应该是`s + strlen(s) - 1`。由此可以得出 `(1)` 应填写为:
```c
q = s + n - 1;
```
#### 第二步:循环遍历比较对称位置字符
- **`(2)`**
我们需要让指针从两端开始逐个对比字符,因此这里应该控制右端点每次移动一位向前靠拢。也就是递减操作符应直接跟上,即:
```c
for(p=s; p <= q ; q--, p++)
```
#### 第三步:检查是否有不相等的情况发生
- **`(3)`**
如果发现某一对左右对应的字符不匹配时立即退出整个过程并给出否定结果标识。故此处需置零标志位并且提前跳出所有迭代流程:
```c
return(0);
```
最终完整的修正版源码如下:
```c
#include <stdio.h>
#include <string.h>
int fun(char *s){
char *p, *q;
int n;
n = strlen(s);
for(q = s+n-1,p=s; p <= q ; q--, p++) {
if(*p != *q )
return(0);
}
return(1);
}
void main(){
char str[80];
printf("请输入一字符串:\n");
scanf("%s",str);
if(fun(str)==1)
printf("这是回文\n");
else
printf("这不是回文\n");
}
```
以上就是针对这个问题的具体解决办法啦!
pta题库c语言填空
### PTA 题库 C语言 填空题练习
#### 示例一:数组初始化与遍历
考虑如下代码片段:
```c
#include <stdio.h>
int main() {
int a[] = {1, 2, 3};
int n = sizeof(a)/sizeof(int);
for (int i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
}
```
上述程序中,`n` 的计算方式是为了获取数组 `a` 中元素的数量。因此,在下面这段代码中空白处应该填写什么来实现相同的功能?
```c
#define SIZE 5
int b[SIZE];
...
for (int i = 0; i < ___ ; ++i) {
...
}
```
正确答案应该是 `SIZE` 或者 `sizeof(b)/sizeof(int)`[^1]。
#### 示例二:指针运算
对于以下代码段,
```c
char str[] = "hello";
char *p;
p = &str[0];
while (*p != '\0') {
putchar(*p++);
}
putchar('\n');
```
如果要修改此循环使得它能够打印字符串并逆序显示字符,则需要调整哪部分?具体来说,如何改变指针操作以及条件判断语句?
修正后的版本可以是这样的:
```c
char str[] = "hello";
char *start = str, *end;
// Move end to the last character of string.
for(end=start;*end!='\0';++end);
--end; // Point at the last non-null byte.
while(start<=end){
putchar(*end--); // Print from back and move forward.
}
if(start<end+1)
putchar(' ');
putchar('\n');
```
这里的关键在于理解指针移动的方向和终止条件的变化。
#### 示例三:函数调用约定
给定一段简单的交换两个整数值的代码:
```c
void swap(int x, int y) {
int t=x;x=y;y=t;
}
```
当尝试通过传递实际参数的方式使用该函数时发现并没有达到预期效果。这是因为传入的是副本而不是原始变量本身。那么应该如何定义这个函数才能真正意义上完成数据互换呢?
改进的方法之一就是采用指针作为形参:
```c
void swap(int *px, int *py) {
int tmp=*px;
*px=*py;
*py=tmp;
}
```
此时调用方也需要相应更改成提供地址的形式,比如 `swap(&var1,&var2)`。
阅读全文
相关推荐















