从字符串中分离找出每个单词,并且寻找某个特定的单词
2011-11-29 20:39
330 查看
在现实情况中,我们往往要从一个长字符串后中(字符中用空格隔开),找出其中的每个单词。然后在作一系列的处理,比如找出某个单词等。
一)从字符串中找出每个单词
一)从字符串中找出每个单词
#include <stdio.h> #include <string.h> inline char *DeleteSpace(char *pString) { while(' ' == *pString) pString ++; return pString; } int GetNumOfWords(char* pString) { if(NULL == pString) return 0; unsigned int nCount = 0; char *pSrc = pString; pSrc = DeleteSpace( pSrc ); while('\0' != *pSrc) { pSrc = strstr(pSrc," "); ++ nCount; if(NULL != pSrc) pSrc = DeleteSpace( pSrc ); else break;//the end of the string } return nCount; } void SetStringArray(char* pSrc, char **pDst) { if(NULL == pSrc) return; unsigned int nLen, nIndex = 0; char *pBegin = pSrc; char *pEnd = pSrc; pBegin = DeleteSpace( pBegin ); while('\0' != *pBegin) { pEnd = strstr(pBegin," "); if(NULL != pEnd) { nLen = pEnd - pBegin; pDst[ nIndex ] = new char[nLen + 1]; strncpy(pDst[ nIndex ], pBegin, nLen); pDst[nIndex][nLen] = '\0'; ++ nIndex; pBegin = DeleteSpace( pEnd ); } else { //the end of string. nLen = strlen(pBegin); pDst[ nIndex ] = new char[nLen + 1]; strncpy(pDst[ nIndex ], pBegin, nLen); pDst[nIndex][nLen] = '\0'; break; } } } int main() { unsigned int i, nCount; char *pSrc = " Hello. I am a student. Welcome to Huazhong University of Science and Techonology. "; nCount = GetNumOfWords(pSrc); char **pDst = new char *[ nCount ](); SetStringArray(pSrc, pDst); //Print the num of words printf("nCount = %d\n",nCount); //Print the every words for(i = 0; i < nCount; ++ i) { printf("%s\n",pDst[i]); } //free memory for(i = 0; i < nCount; ++ i) { delete [] pDst[i]; } pDst = NULL; return 0; }二)从字符串中找出某个特定的单词
#include <stdio.h> #include <string.h> inline char *DeleteSpace(char *pString) { while(' ' == *pString) pString ++; return pString; } int GetNumOfWords(char* pString) { if(NULL == pString) return 0; unsigned int nCount = 0; char *pSrc = pString; pSrc = DeleteSpace( pSrc ); while('\0' != *pSrc) { pSrc = strstr(pSrc," "); ++ nCount; if(NULL != pSrc) pSrc = DeleteSpace( pSrc ); else break;//the end of the string } return nCount; } void SetStringArray(char* pSrc, char **pDst) { if(NULL == pSrc) return; unsigned int nLen, nIndex = 0; char *pBegin = pSrc; char *pEnd = pSrc; pBegin = DeleteSpace( pBegin ); while('\0' != *pBegin) { pEnd = strstr(pBegin," "); if(NULL != pEnd) { nLen = pEnd - pBegin; pDst[ nIndex ] = new char[nLen + 1]; strncpy(pDst[ nIndex ], pBegin, nLen); pDst[nIndex][nLen] = '\0'; ++ nIndex; pBegin = DeleteSpace( pEnd ); } else { //the end of string. nLen = strlen(pBegin); pDst[ nIndex ] = new char[nLen + 1]; strncpy(pDst[ nIndex ], pBegin, nLen); pDst[nIndex][nLen] = '\0'; break; } } } /***************************************************************************** Description : 输出排序后指定的某个字符串 Prototype : void FindSubString(int SerialNumber, char** ppOutString) Input Param : SerialNumber 排序后的序列号,从1~N为按照字典从小到大的排列顺序 Output Param : *ppOutString 指针指向字符子串的首地址,字符串必须以’\0’结束。 如果SerialNumber非法,将*ppOutString指向空字符串。 Return Value : 无 *****************************************************************************/ void FindSubString(char **pDst, int SerialNumber, const int total, char** ppOutString) { if( (SerialNumber >= 1) && (SerialNumber <= total)) { *ppOutString = pDst[SerialNumber - 1]; } else { *ppOutString = NULL; } return; }; int main() { unsigned int i, nCount; char *pSrc = " Hello. I am a student. Welcome to Huazhong University of Science and Techonology. "; nCount = GetNumOfWords(pSrc); char **pDst = new char *[ nCount ](); SetStringArray(pSrc, pDst); //Print the num of words printf("nCount = %d\n",nCount); //Print the every words for(i = 0; i < nCount; ++ i) { printf("%s\n",pDst[i]); } char *pActualOutSubStr = NULL; FindSubString(pDst, 1, nCount, &pActualOutSubStr); printf("\n%s\n",pActualOutSubStr); FindSubString(pDst, 2, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); FindSubString(pDst, 3, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); FindSubString(pDst, 4, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); FindSubString(pDst, 5, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); FindSubString(pDst, 6, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); FindSubString(pDst, 7, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); FindSubString(pDst, 8, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); FindSubString(pDst, 9, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); FindSubString( pDst, -1, nCount, &pActualOutSubStr); printf("%s\n",pActualOutSubStr); //free memory for(i = 0; i < nCount; ++ i) { delete [] pDst[i]; } pDst = NULL; return 0; }
相关文章推荐
- 分离字符串中单词,并找出最长的
- 给你一个字符串s和一个长度相同的单词列表。 找出s中所有子字符串的起始索引,这些字符串中的每个单词只是一个字符串,没有任何中介字符。
- 给你一个字符串s和一个长度相同的单词列表。 找出s中所有子字符串的起始索引,这些字符串中的每个单词只是一个字符串,没有任何中介字符。
- 在字符串中,寻找截取特定单词
- 使用正则表达式找出不包含特定字符串的条目
- 计算出一字符串(字符串中每个单词之间有一个或多个空格)中每个单词的 出现的次数
- 华为机试——在给定字符串中找出单词
- 通过正则 来找出特定的字符 可以输出找出的字符 也可输出删除特定字符的原字符串
- 串的处理 在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下: 1. 把每个单词的首字母变为大写。 2. 把数字与字母之间用下划线字符(_)分
- 使用正则表达式找出不包含特定字符串的条目
- 字符串以单词为单位进行反转,并且必须保留原有分隔符及其个数
- 使用正则表达式找出不包含特定字符串的条目
- Python3基础 str title 把字符串中的每个单词首写字母变为大写其余均为小写
- 每天一道LeetCode-----将字符串切分成若干单词,使得每个单词都在给定的字典中,求出所有的切分结果
- 键盘输入一行字符串,每个单词倒序输出
- Leetcod:557.Reverse Words in a String III 反转字符串中的每个单词。
- 利用Map实现的统计每个输入字符串或则单词出现的次数
- 用正则表达式找出不包含连续字符串abc的单词
- 输入一个字符串,把这个字符串中的每个单词打印出来,即输出到屏幕
- javascript字符串中每个单词的首字母大写化问题