字符串面试题(三)— 把一个字符串的大写字母放到字符串的后面

把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。

例如AbcDeFGhi ->bceiADFG



基于冒泡的思想,从头开始扫描,遇到小写字母就往前面冒:

初始:AbcDeFGhi

冒’b’: bAcDeFGhi
冒’c’: bcADeFGhi
冒’e’: bceADFGhi
冒’h’: bcehADFGi
冒’i’: bcehiADFG



得到最终结果为bceiADFG

最终代码如下:

#include <stdio.h>
#include <string.h>
int main() {
  char s[1000], t;
  int i, j;
  while (scanf("%s", s) != EOF) {
    for (i = 1; i < strlen(s); ++i) {
      j = i;
      if ('a' <= s[i] && s[i] <= 'z')
        while (j != 0 && 'A' <= s[j-1] && s[j-1] <= 'Z') {
          t = s[j-1];
          s[j-1] = s[j];
          s[j--] = t;
        }
    }
    printf("%s\n", s);
  }
  return 0;
}
时间: 2024-09-26 00:07:32

字符串面试题(三)— 把一个字符串的大写字母放到字符串的后面的相关文章

C++基础问题 读一个txt中大写字母的数量

问题描述 C++基础问题 读一个txt中大写字母的数量 读一个txt中大写字母的数量 请问为什么是return i-1 还有就是a.txt文件设置为AAA时是输出大写为3 当设置为AAAc时就变成2了 求助! #include #include using namespace std; int num1(char f[100]) { fstream file; file.open(f,ios::in); char ch; int i=0; while(!file.eof()) { file.ge

字符串面试题(四)— 判断一个字符串是否为另外一个字符串旋转之后的字符串

判断一个字符串是否为另外一个字符串旋转之后的字符串. 例如: 给定s1 = AABCD和s2 = BCDAA,返回1, 给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA AABCD右旋一个字符得到DAABC AABCD右旋两个字符得到CDAAB 思路:根据左旋或右旋结果和原字符串的联系,可以将一个给定的字符串拷贝一份放在该字符串的后面得到新的字符串,只需要判断另一个字符串是不是组合的新字符串的子字符串就可以解决问题. 例如:

字符串笔试题

1.字符串移位包含问题 //普通解法 bool contain_check() { char s[6] = "AABCD"; char d[5] = "CDAA"; int len = strlen(s); for(int i=0; i<len; ++i) { char temp = s[0]; for(int j=0; j<len-1; ++j) s[j] = s[j+1]; s[len-1] = temp; if(strstr(s,d) != 0)

字符串四则运算-用c#编写一个程序,以最原始的方法进行两个字符串的四则运算

问题描述 用c#编写一个程序,以最原始的方法进行两个字符串的四则运算 字符串里面是数值,且不受字数限制. 如两个字符串相加"121343435"+"3453245",设计的程序是:个位与个位相加,满10进1,十位于十位相加... 如果设计的乘法,也是个位先和个位相乘...完了错开一位相加 采取最原始的方法,就像小学学习四则运算一样,一步一步进行 不能把字符串先转换为int等类型在进行运行,因为int类型储存数值长度短,这个程序设计的意义就是可以进行不受字数限制的四则

字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串

原文:字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串 关于字符串的研究,目前已经有两篇. 原理篇:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串  实践篇:字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略 今天来讲第三篇,如何应用上面所学内容,设计一个字符串混淆程序. 先设计一个控制台程序,它是将要被我混淆的程序集文件: public static void Main() { try { RunSnippet(); } cat

一个最基本的关于判断字符串是否为空的问题

问题描述 Strings="";System.out.println(s=="");为什么打印的是true不是应该打印false吗 解决方案 解决方案二:优化过了.简单来说,系统何必为""分配两次内存呢?解决方案三:StringUtils.isEmpty吧或者equals解决方案四:引用1楼skgary的回复: 优化过了.简单来说,系统何必为""分配两次内存呢? 楼主需要了解下常量池的相关内容解决方案五:用一个常量了解决方案六

java 字符串分割的三种方法(总结)_java

最近在项目中遇到一个小问题,一个字符串分割成一个数组,类似String str="aaa,bbb,ccc"; 然后以","为分割符,将其分割成一个数组,用什么方法去实现呢? 第一种方法: 可能一下子就会想到使用split()方法,用split()方法实现是最方便的,但是它的效率比较低 第二种方法: 使用效率较高的StringTokenizer类分割字符串,StringTokenizer类是JDK中提供的专门用来处理字符串分割子串的工具类.它的构造函数如下: publ

c语言-求教编写一个函数求出两个字符串包含的相同的单词

问题描述 求教编写一个函数求出两个字符串包含的相同的单词 编写一个函数,函数首部为void maxword(char *s,char *t),求出两个字符串包含的相同单词(同一字母的大小写视为不同的字符).规定单词全部由英文字母构成,单词直接由一个或多个空格分隔.其中主函数如下: #include Void main() { Char s[]="This is C programming text"; Char t[]="This is a text for C progra

c语言 字符-从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符。

问题描述 从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符. 题目要求 Problem Description 从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符. Input 输入有多组测试数据. 每组两行,第一行是字符串(字符串至少还有一个字符,不多于100个),第二行是一个字符 Output 每组输出一行,删除了所有应删除字符后的字符串 Sample Input ABCDE E ASD Dfg fhd D Sample Output ABCD AS fg