C算法编程题(六)串的处理

简介:

程序描述

  在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
    1.  把每个单词的首字母变为大写。
    2.    把数字与字母之间用下划线字符(_)分开,使得更清晰
    3.    把单词中间有多个空格的调整为1个空格。
    例如:
        用户输入:
        you and     me what  cpp2005program
        则程序输出:
        You And Me What Cpp_2005_program
        用户输入:
        this is     a      99cat
        则程序输出:
        This Is A 99_cat

    我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。
    假设用户输入的串长度不超过200个字符。

程序实现

  这个题目看起来很简单,但是想一想,用C的简单语法实现起来还是有些麻烦的,毕竟没有.net里面那么多字符串处理的方法。

  题目就三个要求,就是字符转换和处理,感觉简单,但是却无从下手。

  还是那句话,做这种编程题,思路清晰了,代码才好实现。这里我说一种思路,如果大家有更好的,欢迎交流。

  如果转换、移除和插入一个字符,就必须知道上一个字符和下一个字符是什么,比如第二点要求,就得知道上一个字符是英文下一个字符是数字或是上一个字符是数字下一个字符是英文,第三点也是,去空格就得知道上一个和下一个字符都是空格,第一点也是如此,变大写就得索引是0或是上一个字符是空格和下一个字符是字符。

  思路就是这样,理清了就会发现很简单了,然后就是一些细节处理了。

  代码我就不分析了,直接贴下代码:

复制代码
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 void main()
  5 {
  6     char strArray[200] = {0};
  7     char strResult[400] = {0};
  8     int i=0,j=0,Len;
  9     int nMark = 0;            
 10 
 11     printf("请输入字符串:\n");
 12     gets(strArray);
 13 
 14     Len = strlen(strArray);
 15 
 16     while(i<Len)
 17     {
 18         switch(nMark)
 19         {
 20         case 0:
 21             {
 22                 if(strArray[i]>='a'&&strArray[i]<='z')
 23                 {
 24                     strResult[j++] = strArray[i++]-'a'+'A';
 25                     nMark = 1;
 26                 }
 27                 else if(strArray[i]>='0'&&strArray[i]<='9')
 28                 {
 29                     strResult[j++] = strArray[i++];
 30                     nMark = 2;
 31                 }
 32                 else if(strArray[i]==' ')
 33                 {
 34                     strResult[j++] = strArray[i++];
 35                     nMark = 0;
 36                 }
 37             }
 38             break;
 39         case 1:
 40             {
 41                 if(strArray[i]>='a'&&strArray[i]<='z')
 42                 {
 43                     strResult[j++] = strArray[i++];
 44                     nMark = 1;
 45                 }
 46                 else if(strArray[i]>='0'&&strArray[i]<='9')
 47                 {
 48                     strResult[j++] = '_';
 49                     strResult[j++] = strArray[i++];
 50                     nMark = 2;
 51                 }
 52                 else if(strArray[i]==' ')
 53                 {
 54                     strResult[j++] = strArray[i++];
 55                     nMark = 3;
 56                 }
 57             }
 58             break;
 59         case 2:
 60             {
 61                 if(strArray[i]>='a'&&strArray[i]<='z')
 62                 {
 63                     strResult[j++] = '_';
 64                     strResult[j++] = strArray[i++];
 65                     nMark = 1;
 66                 }
 67                 else if(strArray[i]>='0'&&strArray[i]<='9')
 68                 {
 69                     strResult[j++] = strArray[i++];
 70                     nMark = 2;
 71                 }
 72                 else if(strArray[i]==' ')
 73                 {
 74                     strResult[j++] = strArray[i++];
 75                     nMark = 3;
 76                 }
 77             }
 78             break;
 79         case 3:
 80             {
 81                 if(strArray[i]>='a'&&strArray[i]<='z')
 82                 {
 83                     strResult[j++] = strArray[i++]-'a'+'A';
 84                     nMark = 1;
 85                 }
 86                 else if(strArray[i]>='0'&&strArray[i]<='9')
 87                 {
 88                     strResult[j++] = strArray[i++];
 89                     nMark = 2;
 90                 }
 91                 else if(strArray[i]==' ')
 92                 {
 93                     i++;
 94                     nMark = 3;
 95                 }
 96             }
 97             break;
 98         default:
 99             break;
100         }
101     }
102 
103     puts("转换后的字符串为:");
104     printf("%s",strResult);
105 
106     getchar();
107 }
复制代码

  运行结果:


本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3411209.html,如需转载请自行联系原作者

相关文章
|
3月前
|
算法 数据安全/隐私保护
火山中文编程 -- MD5算法和SHA算法
火山中文编程 -- MD5算法和SHA算法
20 0
火山中文编程 -- MD5算法和SHA算法
|
5月前
|
算法 Java
算法编程(三十):交替合并字符串
算法编程(三十):交替合并字符串
49 0
|
5月前
|
算法
算法编程(二十八):重新排列单词间的空格
算法编程(二十八):重新排列单词间的空格
35 0
|
5月前
|
算法
算法编程(二十七):千位分隔数
算法编程(二十七):千位分隔数
42 0
算法编程(二十七):千位分隔数
|
5月前
|
存储 算法
算法编程(二十六):判断路径是否相交
算法编程(二十六):判断路径是否相交
31 0
|
5月前
|
算法
算法编程(二十五):检查单词是否为句中其他单词的前缀
算法编程(二十五):检查单词是否为句中其他单词的前缀
35 0
|
4月前
|
机器学习/深度学习 算法
机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习]Bagging算法的编程实现
35 1
|
3月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
74 0
|
2月前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
35 0
|
2月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
33 0