字符串数组操作题c语言
时间: 2025-01-04 08:32:54 浏览: 26
### C语言字符串数组操作练习题及其解法
#### 判断字符串是否为回文
实现一个名为 `Ishw` 的函数来判断给定的字符串是否为回文。此函数通过比较字符串首尾字符逐步向中间靠拢的方式完成验证。
```c
#define _CRT_SECURE_NO_WARNINGS // 防止编译器警告
#include <stdio.h>
#include <string.h>
int Ishw(char s[]) {
int i = 0, j = strlen(s) - 1;
while (i < j) {
if (s[i] != s[j])
return 0;
i++;
j--;
}
return 1;
}
int main() {
char s[10000];
fgets(s, sizeof(s), stdin);
s[strcspn(s, "\n")] = '\0'; // 去除fgets读入的换行符
if (Ishw(s))
printf("yes\n");
else
printf("no\n");
return 0;
}
```
上述代码修正了原始版本中使用不安全的 `gets()` 函数的问题,替换成更安全的 `fgets()` 并处理掉可能存在的换行符[^1]。
#### 字符串反转打印
对于字符串倒置的需求,可以创建一个新的辅助函数用于翻转字符串顺序,并在主函数调用该方法输出结果。
```c
void reverseString(const char *input, char *output) {
int length = strlen(input);
for(int i = 0; i < length ; ++i){
output[i] = input[length-i-1];
}
output[length]='\0';
}
int main(){
const char source[]="hello world";
char reversed[sizeof(source)];
reverseString(source,reversed);
puts(reversed);
return 0;
}
```
这段代码展示了如何接收原字符串并将它逆序存储到另一个缓冲区再显示出来[^2]。
#### 使用指针遍历并修改字符串内容
利用指针特性可以直接访问内存地址从而高效地操纵数据结构内的元素。下面的例子说明了怎样借助指针对字符串进行大小写转换:
```c
void toggleCase(char* str){
while(*str){
if((*str>='a')&&(*str<='z')){
*str=*str-'a'+'A';
}else if((*str>='A')&&(*str<='Z')){
*str=*str-'A'+'a';
}
str++;
}
}
int main(){
char sentence[]="HeLlO wOrLD!";
toggleCase(sentence);
printf("%s",sentence);
return 0;
}
```
这里实现了简单的字母大小写的切换逻辑,当遇到小写字母则变为大写反之亦然[^3]。
#### 数组元素移位
最后一个例子涉及到了一维整型数组的操作——将指定位置之前的全部成员整体后移至末端排列。
```c
void shiftElementsToEnd(int arr[], size_t n, size_t p) {
for(size_t i=n;i>p;i--){
arr[i]=arr[i-p-1];
}
for(size_t k=0;k<=p;++k){
arr[k]=-1;//假设填充值为-1表示被覆盖的位置
}
}
int main(){
int numbers[]={1,2,3,4,5};
size_t numSize=sizeof(numbers)/sizeof(numbers[0]);
shiftElementsToEnd(numbers,numSize,2);
for(auto elem :numbers){
printf("%d ",elem);
}
return 0;
}
```
以上片段完成了从索引零处直到参数p所指示的地方之间的数值迁移工作,并且用特定标记填补腾出来的空白区域[^4]。
阅读全文
相关推荐


















