常见字符串问题总结(三)
2013-11-16 18:02
381 查看
常见字符串问题总结(三)
字符串问题中经常会有删除某一字符串的某一个字符,可以是不同方式的删除,比如将指定的字符删除,删除字符中的空格(包括字符串的头和尾)。本文就列举了部分有关字符串删除的问题。
1. 删除字符串中的空格,要求将字符串前面和后面的所有空格都删除,对字符串中间,如果出现多个连续的空格,只保留一个空格。
2. 查找一个字符串中某个字符出现的频率。
利用hash表就可以实现该问题的解决办法,因为ASSIC码中共有256个字符因此可以建立一个256的hash映射数组,一次遍历字符串,记录每个字符出现的频率。
3. 输入若干个字符串,按字典顺序对其排序,并输出。
一种情况是字符串只有大写或者小写字符,这是可以用strcmp进行比较。而strcmp的实现已经在前面的博文中说过了。
另一种情况是字符串中掺杂着大小写字符,这是可以用库函数中的strcasecmp()进行比较,本文中实现了strcasecmp()函数。
每天练一些,继续加油。
字符串问题中经常会有删除某一字符串的某一个字符,可以是不同方式的删除,比如将指定的字符删除,删除字符中的空格(包括字符串的头和尾)。本文就列举了部分有关字符串删除的问题。
1. 删除字符串中的空格,要求将字符串前面和后面的所有空格都删除,对字符串中间,如果出现多个连续的空格,只保留一个空格。
#include <iostream> #include <cstring> using namespace std; /*删除一个字符串中的空格,包括前面的和后面的;如果中间字符间的空格大于1个则删除其它的空格,只保留一个空格 */
#define MAXSIZE 100//字符串数组的大小 void delspace(char *str) { if(NULL == str) return; char *temp = strdup(str); int i =0; int j =0; while('\x20'== temp[i]) i++; while('\0' != temp[i]) { if(temp[i]!= ' ') str[j++] = temp[i++]; else { while(temp[i] == ' ') i++; str[j++] = ' '; } } if(str[j-1] == ' ') str[j-1] = '\0'; else str[j] = '\0'; //strcpy(str, result); free(temp); } int main() { char test[MAXSIZE]; gets(test); delspace(test); cout<<strlen(test)<<endl<<test<<endl; return 0; }
2. 查找一个字符串中某个字符出现的频率。
利用hash表就可以实现该问题的解决办法,因为ASSIC码中共有256个字符因此可以建立一个256的hash映射数组,一次遍历字符串,记录每个字符出现的频率。
#include <iostream> using namespace std; int main() { char str[100]; int hash[256]; memset(hash, 0, sizeof(int)*256); gets(str); char *temp = str; while('\0' != *temp) { hash[*temp + '\0'] +=1; temp++; } int max =0; char ch = '\0'; for(int i =0; i< 256; i++) { if(hash[i] > max) { max = hash[i]; ch = i+'\0'; } } cout<<max<<endl<<ch<<endl; return 0; }
3. 输入若干个字符串,按字典顺序对其排序,并输出。
一种情况是字符串只有大写或者小写字符,这是可以用strcmp进行比较。而strcmp的实现已经在前面的博文中说过了。
#include <iostream> #include <cstring> using namespace std; /*输入五个字符串,按字典顺序对他们进行输出*/ int main() { char str[5][10], temp[10], (*p1)[10], (*p2)[10]; for(p1 = str; p1 < str+5; p1++) gets(*p1); cout<<endl; for(int i =1; i< 5;i++) { for(p1 =str, p2 =str +1;p1<str+5-i;p1++,p2++ ) //冒泡法排序 { if(strcmp(*p1,*p2)>0) { strcpy(temp,*p2); strcpy(*p2, *p1); strcpy(*p1, temp); } } } for(int i =0; i< 5; i++) cout<<str[i]<<endl; return 0; }
另一种情况是字符串中掺杂着大小写字符,这是可以用库函数中的strcasecmp()进行比较,本文中实现了strcasecmp()函数。
#include <iostream> #include <cstring> using namespace std; /*输入五个字符串,按字典顺序对他们进行输出*/ char mytolower(char ch) { if(ch >= 'A' && ch <= 'Z') ch = ch - ('A' - 'a'); return ch; } int Mystrcasecmp(char* src, char *dest) { if(NULL == src || NULL == dest) { cout<<"parameter error"; return 0; } while((*src == *dest)&&*src != '\0'&& *dest!='\0') { src++; dest++; } if(mytolower(*src) == mytolower(*dest)) return 0; else if(mytolower(*src) > mytolower(*dest)) return 1; else return -1; } int main() { char str[5][10], temp[10], (*p1)[10], (*p2)[10]; for(p1 = str; p1 < str+5; p1++) gets(*p1); cout<<endl; for(int i =1; i< 5;i++) { for(p1 =str, p2 =str+1;p1<str+5-i;p1++,p2++ ) { if(Mystrcasecmp(*p1,*p2)>0) { strcpy(temp,*p2); strcpy(*p2, *p1); strcpy(*p1, temp); } } } for(int i =0; i< 5; i++) cout<<str[i]<<endl; return 0; }
每天练一些,继续加油。
相关文章推荐
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- C语言 字符串常见问题总结
- 字符串常见问题总结(一)
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- 字符串常见问题总结(二)
- 通过sqlplus执行*.sql文件时常见的问题总结
- 移动端常见问题总结
- 放大器电路设计中的常见问题经验总结
- highcharts图表常见问题:关于如何设置数据点起始位置为坐标原点的问题分析与总结篇独家爆料
- 功能测试方法总结/常见面试问题
- android(eclipse)新手常见问题总结(一)
- SERVER中一些常见性能问题的总结
- 总结几个ISA的常见问题 推荐
- [FAQ13479][Camera Tuning]CCT常见问题总结
- 定位UNIX上常见问题的经验总结
- 性能测试常见的问题总结
- Android权限机制总结与常见权限不足问题分析
- LinuxC简谈之数组、字符串与指针相关的常见错误与问题
- 关于字符串检索类问题的总结
- 收集关于angular与JS的一些常见问题 总结