从键盘输入 不到十个字符(0-9,a-z),将英文位颠倒,数字不变,
定义一个数组记录所有字符位的下标,然后收尾下标对应字符逐个交换即可
int main() {
int i = 0;
int count;
scanf("%d',&count);
char ch[10];
for (i = 0; i < count; i++)
scanf_s("%d", &ch[i]);
char flag[10] = { 0 };
int n = 0;
for (i = 0; i < count; i++)
if ((ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z'))
{
flag[n] = i;
n++;
}
if (n > 1)
{
for (i = 0; i < n / 2; i++)
{
int t = ch[i];
ch[i] = ch[n - i - 1];
ch[n - i - 1] = t;
}
}
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int inverse(char *str1)
{
int length = 0;
char *p1 = NULL;
char *p2 = NULL;
if (str1 == NULL)
{
return -1;
}
length = strlen(str1);
p1 = str1; //指针指向字符串的开头;
p2 = str1 + (length - 1); //指针指向字符串的最后一个;
while (p1 < p2)
{
char c = *p1;
*p1 = *p2;
*p2 = c;
++p1;
--p2;
}
return 0;
}
int main(void)
{
char buf[10];
printf("输入字符串:");
scanf("%s",&buf);
inverse(buf);
printf("反转后的字符串:%s\n", buf);
system("pause");
return 0;
}
指针的实现方式,性能更好,容易理解。
思路:
1、申请两个数组A和B,A存输入字符串,B存A的逆序。
2、for循环将A中字符替换为B中相同下标的字符。
代码仅供参考:
#include <stdio.h>
#include <string.h>
int main(void )
{
char str[10] = {0};
printf ("Please input a string: ");
scanf ("%s", str);
int len = strlen (str);
if (len > 10) {
printf ("Out of range!!!\n");
return -1;
}
// 逆序字符串str,并将结果存到str2中。
char str2[11] = {0};
int count = 0;
for (int i = 0;i < len ;i ++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str2[count] = str[i];
count ++;
}
}
//将上一个for循环最后多加的一次减掉
count --;
//将str2中的字符赋值给str中对应位置的字符。
for (int i = 0;i < len;i ++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = str2[count];
count --;
}
}
//输出进行字符逆序操作后的字符串
printf ("After: %s\n", str);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632