《编程思维与实践》1051.听写字符串
题目
思路
不难发现,在一串字符串s的首或者尾加一个字符:
当该字符大于或等于s[0]时,加在s的首位字典序更大;
当该字符小于s[0]时,加在s的末尾字典序更大.
编写insert函数后再判断再哪里插入字符即可.
注意的点:
要求用大写字母输出,而输入的字母大小写都有,不妨统一将输入的字母转化成大写字母.
代码
#include<stdio.h>
#include<string.h>
void insert(char *ans,int pos,char ch) //将ans的pos位替换为ch,再将原来pos及后面的字符右移一位
{
char temp[1001];
strcpy(temp,ans+pos);
ans[pos]=ch;
strcpy(ans+pos+1,temp);
}
int main()
{
char s[1001]; //长度不超过1000
scanf("%s",s);
for(int i=0;i<strlen(s);i++)
{
s[i]=(s[i]>='a'&&s[i]<='z')?(s[i]-32):s[i]; //全转化为大写字母处理
}
char ans[1001];
ans[0]=s[0];
ans[1]='\0';
for(int i=1;i<strlen(s);i++)
{
if(ans[0]>s[i])
{
insert(ans,strlen(ans),s[i]); //插在末尾
}
else
{
insert(ans,0,s[i]); //插在首位
}
}
printf("%s\n",ans);
return 0;
}