题目描述
【问题描述】输入一个字符串,将这个字符串中的大写英文字母除去,输出剩余的字符组成的字符串。(要求用指针做)
【输入形式】输入一个字符串,可能包含有大写英文字母
【输出形式】输出除去大写英文字母的剩余字符串
【样例输入】Hello, World! 你好,世界!
【样例输出】ello, orld! 你好,世界!
解题思路
这里首先是空格问题的处理方式,由于%s的空格断开,所以用循环输入进去即可,然后删除字符时将该字符之后的字符向前移(实际大小并未改变)
源代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char s1[1000],s2[1000],*p=s1,*q=s2,s;
int i=0;
while ((s=getchar())!='\n'){
s1[i]=s;
i++;
}
s1[i]='\0';
strcpy(s2,s1);
while (*p!='\0'){
if (*p >= 'A' && *p <= 'Z') {
q++;
strcpy(p,q);
}
else {p++; q++;}
}
printf("%s",s1);
system("pause");
return 0;
}
/*法二
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[1000], * p, c;
int i = 0;
while ((c = getchar()) != '\n') {
str[i] = c;
i++;
}
str[i] = '\0';
p = str;
while (*p!='\0'){
if (*p >= 'A' && *p <= 'Z') {
char* q = p;
while (*q != '\0') {
*q = *(q + 1);
q++;
}
continue;
}
p++;
}
printf("%s", str);
system("pause");
return 0;
}
二分
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
void swap(float *a,float *b){
float t=*a;
*a=*b;
*b=t;
}
void sort(float *arr,int n){
int i,j;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (arr[i]>arr[j])
swap(&arr[i],&arr[j]);
}
int binaryf(float *arr,int n,float u){
int a=0,b=n;
int k=(a+b)/2;
while (a<b){
if (arr[a]==u)
return a+1;
if (arr[b]==u)
return b+1;
if (arr[k]==u)
return k+1;
else if (arr[k]>u)
b=k-1;
else a=k+1;
k=(a+b)/2;
}
}
int main(){
float lst[1000],*p=lst,u;
int n,i,res;
scanf("%d%f",&n,&u);
for (i=0;i<n;i++)
scanf("%f",(p+i));
sort(p,n);
res=binaryf(p,n,u);
printf("%d",res);
system("pause");
return 0;
}
*/
总结
以上时我给出的三种解法,当然初学者可以选择理解,终有一日您会觉得小编的代码其实非常简单,学习本就是这样,加油~