码迷,mamicode.com
首页 > 其他好文 > 详细

字符串

时间:2015-06-10 23:59:12      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

stycpy函数:

c语言中的函数,需要头文件:<stdio.h>和<string.h>。

char *stycpy(char *dest,const char* src);

把src地址开始且含有null结束符的字符串复制到以dest开始的地址空间。

 

sprintf函数:

c语言中的函数,需要头文件<stdio.h>。

int sprintf(char *buffer,const char*format,[argument]..);

把格式化的数据写入某个字符串缓冲区,返回字符串的长度。

eg:n=sprintf(buffer,"%d plus %d is %d",a,b,a+b);

 

题目1:给出一个字符串,把其中的空格全部替换成%20.

这题需要问清楚面试官是在原数组的基础上进行替换,还是建立一个新的字符串。

然后如果从头到尾去扫描空格,则需要进行多次的复制,算法复杂度为O(n^2)。

改成从尾到头去扫描空格。首先扫描字符串的数目以及空格的数目,然后把新字符串的总长度计算出来。设置指针p1和p2分别指向元字符串的末尾、新字符串的末尾。然后在没有遇到空格

的时候,就复制,遇到空格的时候就替换。直到两个指针相重合。

#include<stdio.h>

void sapce_replace(char *string_input)    //在原字符串上替换,保证原字符串有足够多的空间
{
    if(string_input==NULL)  //特殊情况的考虑,字符串为空。
        return;
    int string_length,spaces_num;
    for(string_length=0,spaces_num=0;*string_input!=\0;string_input++,string_length++)
    {
        if(*string_input== )
            spaces_num++;
    }
    if(spaces_num==0)   //特殊情况的考虑,没有空格的情况。
        return;
    string_length+=1;   //\0也要占用空间
    char *p1=string_input;    //p1指向‘\0’
    char *p2=p1+2*spaces_num;   //p2指向新字符串的末尾
    while(p1!=p2)
    {
        if(*p1!= )
        {
            *p2=*p1;
            p2--;
            p1--;
        }
        else
        {
            *p2=0;
            *(--p2)=2;
            *(--p2)=%;
            --p2;
            --p1;
        }
    }
}

void main()
{
    char input[100]="We are family!";
    sapce_replace(input);
    printf("%s",input);
}

 

题目2:找到一个字符串中的无重合字符子串的最大长度。

思路非常简单:从头到尾搜索原字符串s。把和s_sub没有重合的字符加入到s_sub中,如果出现了重合的字符,就把s_sub中重合字符及其前面的字符全部删除,加入当前字符。

计算当前s_sub的长度,如果比历史的最大不重合子串长度maxlength大,就更新maxlength值。

技术分享
#include <iostream>
#include<string>
using namespace std;

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int maxlength=0;
        string s_sub;
        for(int i=0;i<s.length();i++)
        {
            string::size_type position=s_sub.find(s[i]);    //查找s[i]在s_sub中的位置
            if(position!=s_sub.npos)     //找到了和sub重合的位置
            {
                s_sub=s_sub.substr(position+1,s_sub.size()-position-1);    //把重合的字符及前面的字符都删掉
                s_sub+=s[i];        //然后把当前字符加进去
            }
            else       //如果和前面的没有重合,就把该字符加到子字符串中
            {
                s_sub+=s[i];
            }
            if(s_sub.length()>maxlength)    //如果子字符串的长度比之前找到的最大长度大,就更新最大长度的值。
                maxlength=s_sub.length();
        }
        return maxlength;
    }
};

void main()
{
    Solution sol;
    string s="afhafuhgrjfusfhurwfhuewfsd";
    cout<<sol.lengthOfLongestSubstring(s);
}
技术分享

字符串

标签:

原文地址:http://www.cnblogs.com/wy1290939507/p/4567695.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!