反转一个输入的字符串c语言,其中输入的字符串中符号位置不变
时间: 2024-10-07 14:08:21 浏览: 40
在C语言中,反转一个输入字符串的同时保持符号位置不变,可以先将字符串分解成字符数组,并分别处理字符和非字符(如空格、标点等)。以下是简单的步骤:
1. 定义一个函数,比如`reverse_string_with_symbols(char *str)`,接受一个指向字符串首元素的指针作为参数。
2. 初始化两个指针,一个`start`指向字符串开始,一个`end`指向字符串结束。
3. 创建一个临时指针`temp`,用于交换字符。
4. 遍历字符串直到`start`超过非字符部分:
- 检查当前字符是否是非字符,如果是,则跳过;
- 否则,将`*start`与`*end`交换并移动指针。
5. 当遇到非字符时,停止交换,因为之后的都是非字符不需要反转。
6. 循环结束后,`end`指针会停在第一个非字符之前,所以再从`end`向`start`遍历一次,将非字符对齐到它们原来的位置。
7. 最后返回处理后的字符串。
下面是一个简单的示例代码实现:
```c
#include <stdio.h>
#include <string.h>
// 函数声明
void reverse_string_with_symbols(char *str);
int main() {
char input[100];
printf("请输入字符串: ");
fgets(input, sizeof(input), stdin); // 读取一行输入,包括换行符
input[strcspn(input, "\n")] = '\0'; // 移除换行符
reverse_string_with_symbols(input);
printf("反转后的字符串(保留符号位置): %s\n", input);
return 0;
}
// 实现函数
void reverse_string_with_symbols(char *str) {
int start = 0, end = strlen(str) - 1, temp;
while (start < end && str[start] != '\0') { // 忽略'\0'
if (!isalnum(str[start])) { // 如果不是字母或数字
start++;
continue;
}
if (!isalnum(str[end])) { // 同理检查末尾
end--;
continue;
}
temp = str[start]; // 交换字符
str[start] = str[end];
str[end] = temp;
start++; // 移动start指针
end--; // 移动end指针
}
// 将非字符放回原位置
for (int i = 0; i <= end; i++) {
if (!isalnum(str[i])) {
memmove(&str[i + 1], &str[i], end - i);
str[i] = '\0';
break;
}
}
}
```
阅读全文