编程学习笔记4--字符串处理
来源:互联网 发布:如果关羽不失荆州 知乎 编辑:程序博客网 时间:2024/04/28 15:20
字符串方面的只是,用C语言自己已经处理了很多了,有点经验了,但是还是有一些新的内容,值得关注,比如这里学习发现的qsort,和bsearch函数,以前不曾用过。
常用的输入输出控制方式
1、数据量不定while(scanf(“%d”,&n) != EOF)
2、先给数据量scanf(“%d”,&n); while (n--){}
3、以某数值或符号结束
while(scanf(“%d”,&n),n)
1、直接输出数据然后换行
2、每组数据后follow一个空行
3、每两组数据之间between一个空行
2、先给数据量scanf(“%d”,&n); while (n--){}
3、以某数值或符号结束
while(scanf(“%d”,&n),n)
1、直接输出数据然后换行
2、每组数据后follow一个空行
3、每两组数据之间between一个空行
对于字符串输入的处理:
C语法:
char buf[20];
gets(buf);
C++语法:
如果用string buf;来保存:
getline( cin , buf );
如果用char buf[ 255 ]; 来保存:
cin.getline( buf, 255 );
scanf(“ %s%s”,str1,str2),在多个字符串之间用一个或多个空格分隔;
若使用gets函数,应为gets(str1); gets(str2); 字符串之间用回车符作分隔。
通常情况下,接受短字符用scanf函数,接受长字符用gets函数。
而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。
getchar():读入一个字符
whlie((ch=getchar())!=EOF)
char buf[20];
gets(buf);
C++语法:
如果用string buf;来保存:
getline( cin , buf );
如果用char buf[ 255 ]; 来保存:
cin.getline( buf, 255 );
scanf(“ %s%s”,str1,str2),在多个字符串之间用一个或多个空格分隔;
若使用gets函数,应为gets(str1); gets(str2); 字符串之间用回车符作分隔。
通常情况下,接受短字符用scanf函数,接受长字符用gets函数。
而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。
getchar():读入一个字符
whlie((ch=getchar())!=EOF)
{
}
gets():读入一行
while(gets(buf)!=NULL) {
}
}
gets():读入一行
while(gets(buf)!=NULL) {
}
案例分析
int MyStrchr(char * s, char c) //看s中是否包含 c{for( int i = 0; i < strlen(s) -1 ; i ++ )if( s[i] == c)return 1;return 0;} 哪里不好?这个函数执行时间和 s 的长度是什么关系? strlen 是一个o(N)的函数,每次判断 i < strlen(s) – 1 都要执行,太浪费时间了
字符串内元素查找
#include <string.h>#include <stdio.h>/**char *strstr(char *s1, char *s2);Scans a string for the occurrence of a given substring.查找给定字符串在字符串中第一次出现的位置,返回位置指针strstr scans s1 for the first occurrence of the substring s2.Return Valuestrstr returns a pointer to the element in s1, where s2 begins (points to s2 in s1). If s2 does not occur in s1, strstr returns null.如果找到,返回指针,指向s1中第一次出现s2的位置如果找不到,返回 NULL类似的还有查找一个字符出现的位置strchr*/char str[] = "lazy";char string[] = "The quick brown dog jumps over the lazy fox";int main( void ){ char *pdest; int result; pdest = strstr( string, str ); result = pdest - string + 1; if( pdest != NULL ) printf( "%s found at position %d\n\n", str, result ); else printf( "%s not found\n", str );}
单词排序
输入若干行单词(不含空格),请按字典序排序输出。大小写有区别。单词一共不超过100行,每个单词不超过20字符,并查找输入字符串的位置
#include <stdio.h>#include<string.h>#include <stdlib.h>char Word[5][30];/**函数原型:void qsort(void *base, int nelem, int width, int(*fcmp)(const void *, const *))头文件:#include<stdlib.h>是否是标准函数:是函数功能:对记录进行从小到大的快速排序。参数base指向存放待排序列的数组的首地址,nelem为数组中元素的个数,width为每个元素的字节数,int(*fcmp)(const void *, const *)为由用户提供的比较函数。返回值:无*//**函数原型:void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *))头文件:#include<stdlib.h>是否是标准函数:是函数功能:二分法查找。参数key指向要查找的关键字的指针,base指向从小到大的次序存放元素的查找表,nelem指定查找表元素的个数,width指定查找表中每个元素的字节数,int(*fcmp)(const void *, const *)为由用户提供的比较函数。返回值:如果没有找到匹配的值返回0,否则返回匹配项的指针。*/int MyCompare( const void * e1, const void * e2 ){return strcmp( (char * ) e1, (char * ) e2 );}int main(){int n = 0; //单词个数char obj[20];char *search;while(scanf("%s",Word[n]) != EOF && Word[n][0])n ++;qsort(Word, n,sizeof(Word[0]),MyCompare);int i;for(i = 0; i < n; i ++ )printf("%s\n",Word[i]); // ‘\n’表示换行 printf("排序完成,输入要查找的单词\n"); gets(obj); search=(char*)bsearch(obj,Word,5,sizeof(Word[0]),MyCompare); if(search) { printf("所查找的位置为:%d",(search-Word[0])/30+1); }return 0;}
字串判断
判断s里面的元素是不是都能在t里面找到
#include <stdio.h>char s[100010];char t[100010];int main(){int i,j;while (scanf( "%s%s",s,t) > 0 ) { i = 0;for(j = 0 ; s[i] && t[j]; j ++ )<span style="white-space:pre"></span> {if( t[j] == s[i] ) i ++;}if ( s[i] == 0) // ‘\0’ 的Ascii 码就是 0printf("Yes\n");elseprintf("No\n");}return 0;}
判断第一个字符串是不是第二个的字串
#include <stdio.h>#include<string.h>char s[100];char t[100];int main(){int len_s,len_t,i,flag=0;char *p;while (scanf( "%s%s",s,t) > 0 ){ len_t=strlen(t); len_s=strlen(s); for(p=s,i=0;i<=len_t-len_s;i++) { if(strncmp(p,t,len_s)==0) { flag=1; printf("yes!\n"); break; } p++;//每次指针向后移动 } if(flag==0) { printf("no!\n"); }}return 0;}
0 0
- 编程学习笔记4--字符串处理
- WINDOWS核心编程学习笔记--字符串处理
- Java学习笔记3:Java编程中字符串的处理
- 编程笔记_JAVA_字符串处理
- ABAP学习笔记--处理字符串
- C#学习笔记-字符串处理
- PHP字符串处理学习笔记
- python学习笔记-字符串处理
- python字符串处理学习笔记
- 内核编程笔记(一、内核字符串处理)
- python 学习笔记(4)解析和字符串处理
- C# 学习笔记 -- 第四天 处理字符串
- ABAP学习笔记--处理字符串1
- 学习笔记之字符和字符串处理
- C++字符串处理函数学习笔记
- Python字符串处理(版本2.7)-学习笔记
- PHP字符串处理函数示例学习笔记
- Boost学习笔记 -- 字符串与文本处理
- poj 1190 dfs+神剪枝
- 罗素的火鸡问题:互联网归纳法---TOMsInsight 2014.08.27
- Shell编程<1>---控制语句
- BST
- 关于android开发中涉及到的java知识:集合类(三)
- 编程学习笔记4--字符串处理
- 第15周项目3-在OJ上玩指针-(1)
- js日期比较(yyyy-mm-dd)
- kmeans聚类算法matlab实现
- OSPF过滤的方式
- boolean android.content.SharedPreferences.getBoolean(String key, boolean defValue)
- 第15周项目3-在OJ上玩指针-(2)
- 扬州旅游app(四)
- 2014-Aisa-Shanghai-onsite