用C语言编写函数int str_inv(char str[]),将字符串str反序。例如,原字符串为"abcdefg",则反序后为"gfedcba"
时间: 2024-03-26 09:34:33 浏览: 54
好的,这是一个比较常见的字符串操作,下面是该函数的C语言实现:
```c
#include <string.h>
int str_inv(char str[]) {
int len = strlen(str);
char temp;
for (int i = 0; i < len / 2; i++) {
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
return 0;
}
```
该函数使用了一个循环,从字符串的两端开始,依次交换字符,直到字符串中间位置。这样就可以实现字符串的反序。需要注意的是,该函数只是修改了传入的字符串参数,没有返回值。例如,可以这样调用该函数:
```c
char str[] = "abcdefg";
str_inv(str);
printf("%s\n", str); // 输出 "gfedcba"
```
希望能对你有所帮助!
相关问题
⑴ 用c语言编写函数int rev_prime(int m,int n,int x[]),求区间m到n中的所有整数的反序数,将反序数中的素数存入数组x中,函数的返回值是素数的个数。 反序数:将原数各位数字颠倒后的数,例如:123的反序数为321,70的反序数为7。 ⑵ 编写main函数,接收从键盘输入的m和n的值,调用函数reverse求m到n之间的所有元素的反序数中的素数,将结果数组按以下要求写到输出文件“out.txt”中。
以下是实现该功能的代码:
```
#include <stdio.h>
#include <math.h>
/* 判断一个数是否为素数 */
int is_prime(int n){
int i;
if(n < 2) return 0;
for(i = 2; i <= sqrt(n); i++){
if(n % i == 0) return 0;
}
return 1;
}
/* 反转一个整数 */
int reverse(int n){
int rev = 0;
while(n > 0){
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
/* 求区间m到n中所有整数的反序数中的素数 */
int rev_prime(int m, int n, int x[]){
int i, count = 0;
for(i = m; i <= n; i++){
int rev = reverse(i);
if(is_prime(rev)){
x[count] = rev;
count++;
}
}
return count;
}
int main(){
int m, n, x[100], i, count;
printf("请输入m和n的值:");
scanf("%d%d", &m, &n);
count = rev_prime(m, n, x);
FILE *fp;
fp = fopen("out.txt", "w");
fprintf(fp, "区间[%d, %d]中反序数中的素数有:%d个\n", m, n, count);
fprintf(fp, "分别是:");
for(i = 0; i < count; i++){
fprintf(fp, "%d ", x[i]);
}
fclose(fp);
printf("结果已写入文件out.txt中!\n");
return 0;
}
```
运行程序后,输入m和n的值,程序将在区间[m, n]中求出所有整数的反序数中的素数,并将结果写入out.txt文件中。
用c语言编写函数int rev_prime(int m,int n,int x[]),求区间m到n中的所有整数的反序数,将反序数中的素数存入数组x中,函数的返回值是素数的个数。反序数:将原数各位数字颠倒后的数,例如:321的反序数为70,7的反序数为<>。(<>) 编写main函数,接收从键盘输入的m和n的值,调用函数reverse求m到n之间的所有元素的反序数中的素数,将结果数组按以下要求写到输出文件“out.txt”中。
以下是实现该题目的代码,注释中有详细的说明:
```c
#include <stdio.h>
// 判断一个数是否为素数
int is_prime(int num) {
if(num <= 1) return 0; // 1不是素数
for(int i = 2; i * i <= num; i++) {
if(num % i == 0) return 0;
}
return 1;
}
// 反转一个整数的各个位上的数字
int reverse(int num) {
int res = 0;
while(num) {
res = res * 10 + num % 10;
num /= 10;
}
return res;
}
// 求区间[m, n]中的所有整数的反序数中的素数
int rev_prime(int m, int n, int x[]) {
int cnt = 0; // 记录素数个数
for(int i = m; i <= n; i++) {
int rev_num = reverse(i); // 反转i的各个位上的数字
if(is_prime(rev_num)) {
x[cnt++] = rev_num; // 将素数存入数组x中
}
}
return cnt;
}
int main() {
int m, n;
printf("请输入区间[m, n]的值:");
scanf("%d %d", &m, &n);
int x[n - m + 1]; // 定义结果数组
int cnt = rev_prime(m, n, x); // 调用rev_prime函数得到素数个数
FILE* fp = fopen("out.txt", "w"); // 打开输出文件
fprintf(fp, "区间[%d, %d]中反序数中的素数有:\n", m, n);
for(int i = 0; i < cnt; i++) {
fprintf(fp, "%d ", x[i]); // 将结果写入输出文件
}
fclose(fp); // 关闭输出文件
printf("结果已写入out.txt文件中!\n");
return 0;
}
```
注意,上述代码中定义的结果数组 `x` 的长度为 `n-m+1`,因为区间 `[m, n]` 中一共有 `n-m+1` 个整数。
阅读全文