精华内容
下载资源
问答
  • 在字符串中的数字前面加字符

    千次阅读 2018-08-08 11:57:35
    问题描述:请编写程序,实现以下功能:在字符串中的所有数字字符前加一个$字符。例如,输入 A1B23CD45,输出 A$1B$2$3CD$4$5。 一个哥们的解法是:用串S拷贝出另一个串T,对串T从头至尾扫描,对非数字字符原样写入...

    问题描述:请编写程序,实现以下功能:在字符串中的所有数字字符前加一个$字符。例如,输入 A1B23CD45,输出 A$1B$2$3CD$4$5。

    一个哥们的解法是:用串S拷贝出另一个串T,对串T从头至尾扫描,对非数字字符原样写入串S,对于数字字符先写一个$符号再写该数字字符,最后,在S串尾加结束标志。使用此方法是牺牲空间,赢得时间。

    代码如下:

    #include <stdio.h>
    int fun(char *s)
    {
        char t[80];
        int i, j;
        for(i=0; s[i]; i++)  /*将串s拷贝至串t*/
            t[i]=s[i];
        t[i]='\0';
        for(i=0,j=0; t[i]; i++)
        /*对于数字字符先写一个$符号,再写该数字字符*/
            if(t[i]>='0' && t[i]<='9')
            {
                s[j++]='$';
                s[j++]=t[i];
            }
        /*对于非数字字符原样写入串s*/
            else
                s[j++]=t[i];
        s[j]='\0';  /*在串s结尾加结束标志*/
        return 0;
    }
    int main()
    {
        char s[80];
        printf ( "Enter a string:" );
        scanf ("%s", s);  /*输入字符串*/
        fun(s);
        printf ("The result: %s\n", s);  /*输出结果*/
        return 0;
    }

    但是我想了想,为什么要先拷贝出来,不能直接再声明一个字符串然后一一赋值,于是自己改了改

    #include <stdio.h>
    int fun(char *s,char *t)
    {
       int i,k;
       for(i=0,k=0;s[i];i++,k++){
        if(s[i]>='0'&&s[i]<='9'){
            t[k++]='#';
            t[k]=s[i];
           }
        else
        {
            t[k]=s[i];
        }
       }
       t[k]='\0';
    }

    int main()
    {
        char s[80];
        char t[80];
        printf ( "Enter a string:" );
        scanf ("%s", s);  /*输入字符串*/
        fun(s,t);
        printf ("The result: %s\n", t);  /*输出结果*/
        return 0;
    }

     

    展开全文
  • 给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余...

    给定一个字符串,逐个翻转字符串中的每个单词。

    示例 1:

    输入: "the sky is blue"
    输出: "blue is sky the"
    

    示例 2:

    输入: "  hello world!  "
    输出: "world! hello"
    

    解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    示例 3:

    输入: "a good   example"
    输出: "example good a"
    

    解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

    说明:

    无空格字符构成一个单词。
    输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

    进阶:

    请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。

    解题1:split到列表中,反转,再逐个放入string中返回

    class Solution {
    public:
        string reverseWords(string s) {
            string w="";
            for(char c:s){
                if(c==' '){
                    word.push_back(w);
                    w="";
                }
                else w+=c;
            }
            word.push_back(w);  //放入
            reverse(word.begin(),word.end());
            string res="";  
            for(string t:word){
                if(t!="")
                res+=t+" ";
            }
            if(res.length())  //删删删
            res.pop_back();
            return res;  //删除最后空格
        }
        //
    private:
        vector<string> word;
    };
    

    解题2:原地转化

    (1)reverse整个字符串;
    (2)序号idx为新覆盖的翻转后字符串;
    (3)start找到每一个单词的头部,end找到每一个单词的尾部,reverse(s.begin()+start,s.begin()+end);反转每一个单词,添加到idx后面;
    (4)若idx不为0,则在找到新单词时往idx的位置加入空格;
    (5)最后删除idx后面的字符串,返回s即可;

    class Solution {
    public:
        string reverseWords(string s) {
            reverse(s.begin(),s.end());
            int n=s.size();
            int idx=0;
            int start=0;
             while(start<n){
                if(s[start]!=' '){
                    if(idx) s[idx++]=' ';  //第一个单词以后
                    int end=start;
                    while(end<n&&s[end]!=' ') end++;
                    reverse(s.begin()+start,s.begin()+end);
                    //反转
                    while(start<end){
                        s[idx++]=s[start++];
                    }
                }
                else start++;
            }
            s.erase(s.begin()+idx,s.end());  //若s为空,直接全部删除
            return s;
        }
    };
    
    展开全文
  • 字符串操作:前段未知,后几位是数字的字符串中,让后几位数字可配合NumericUpDown计算 遇到一个隐藏问题,似乎是前面程序员未解决。找了下网上也没有类似,好吧,自己写。 需求 输入字符串。该字符串由数字和...

    字符串操作:在前段未知,后几位是数字的字符串中,让后几位数字可配合NumericUpDown计算

    遇到一个隐藏问题,似乎是前面程序员未解决的。找了下网上也没有类似的,好吧,自己写。

    需求

    输入字符串。该字符串由数字和字母组成,后几位必为数字,需要取数字能自加,然后显示。

    分析

    使用TextBox和NumericUpDown控件可以实现显示与加减,需要将字符串一分为二,截取前部分包含非数字,后部分单纯数字。计算数字,再进行拼接。

    在_TextChanged事件中分割字符串,获取NumericUpDown.Value值;在NumericUpDown的_ValueChanged事件中拼接字符串。

    问题

    NumericUpDown.Value是Decimal类型,正确截取后几位数字之后,如果是"0000XX"形式,转换为Decimal就只有"XX"了,和需求不符。想到以下几种解决方案:

    • 使用占位符或转换回字符串时规定数字位数,这样在规定位数内会自动补0

    • 给包含非数字的前部字符串后面填充"0",长度为截取的后部字符串长度,然后在拼接时,在前部字符串尾用NumericUpDown.Value替换相应长度的"0"

    占位符的使用如下:

    int a = 1598;   
    // 0 描述:占位符,如果可能,填充位
    string str = string.Format("{0:000000}",a);
    // 输出 :001598
    string str0 = string.Format("{0,10:D8}",a);
    // 输出 :00001598
    

    使用占位符需要知道数字位数,位数在使用中并非固定,那只能用参数传递位数。但是在Micro文档中也没有找到可以传入位数的方法,所以只能使用更麻烦的第二种解决方案了。

    实现

    //TextChanged事件,在文本框变化时触发
    private void tbx_Vendor_SN_TextChanged(object sender, EventArgs e)
    {
        //string pattern_alphabet = @"[A-Za-z]+";
        string pattern_num = @"\d+";            
        // 返回最后一个非数字字符的索引
        int a_z_last_index = lastWordIndexInString(tbx_Vendor_SN.Text);
        // 若有非数字存在,则截取最后一个非数字前的字符串,并在后面补足0
        if (a_z_last_index != 65535)
        {                
            // 截取最后一个字母前的一段字符串
            sn_alphabet_part = tbx_Vendor_SN.Text.Substring(0, a_z_last_index + 1);
            if (tbx_Vendor_SN.Text.Length > a_z_last_index)
            {                   
                int i = 0;
                // 用0补全这段字符串
                while (i < (tbx_Vendor_SN.Text.Length - a_z_last_index - 1))
                {
                    sn_alphabet_part += "0";
                    i++;
                }
            }
        }
        else
        {
            // 若无字母存在,直接取数字
            sn_alphabet_part = "";
        }
        foreach (Match m_num in Regex.Matches(tbx_Vendor_SN.Text, pattern_num))
            sn_num_part = m_num.Value;
        // 若有数字,更新numericUpDown.Value
        if (sn_num_part != "")
            numericUpDown1.Value = Decimal.Parse(sn_num_part.Trim());
    }
    /// <summary>
    /// 返回字符串中最后一个非数字的位置索引
    /// </summary>
    /// <param name="str">含有非数字的字符串</param>
    /// <returns>最后一个非数字字符的索引,若字符串无,返回65535</returns>
    public int lastWordIndexInString(string str)
    {
        for (int i = str.Length - 1; i >= 0; i--)
        {
            if (!Char.IsDigit(str[i]))
            {
                //非数字字符的索引
                return i;
            }
        }
        return 65535;
    }
    /// <summary>
    /// Value值变化时更新TextBox
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {                
        string str_num = numericUpDown1.Value.ToString();
        if (sn_alphabet_part != "")
        {
            if (lastWordIndexInString(sn_alphabet_part) < (sn_alphabet_part.Length - str_num.Length))
            {
                // 去掉适合长度的“0”
                sn_alphabet_part = sn_alphabet_part.Remove(sn_alphabet_part.Length - str_num.Length, str_num.Length);
                // 在去掉“0”的位置上拼接Value
                sn_alphabet_part += str_num;
                // 更新Text
                tbx_Vendor_SN.Text = sn_alphabet_part;
            }                
        }
        else
        {
            tbx_Vendor_SN.Text = str_num;
        }            
    }
    

    OK! 这样就可以用NumericUpDown控件加减产品序列号了!

    展开全文
  • 提取字符串中的数字并分别保存

    千次阅读 2008-12-17 01:43:00
    题目:C++里一个字符串,比如"100,10"或者"100 10",怎么样才能把100和10分别提取出来,保存到2个数组里或者保存到分开2个字符串里? 这里有两种做法,一种是考虑提取出来数是否为0开头,如果是0开头则去掉...

    在论坛看到一位朋友提的,很简单的东西,就大概写了个,权当顺便复习下字符操作函数。
    题目:C++里一个字符串,比如"100,10"或者"100 10",怎么样才能把100和10分别提取出来,保存到2个数组里或者保存到分开的2个字符串里?
    这里有两种做法,一种是考虑提取出来的数是否为0开头,如果是0开头则去掉前面的0;另一种是不考虑这个问题。这只是在最后的输出上加不加一个判断和处理的问题。
    源程序分别如下:
    //(1)去掉数开始的0的
    #include
    #include
    #include
    #include
    using namespace std;
    int main()
    {
    string Str,Str1;
    vector S;
    cout<<"Input your string:";
    getline(cin,Str);
    for(string::size_type i=0;i!=Str.size();++i)
    {
    if(isdigit(Str[i]))
    {
    Str1.push_back(Str[i]);
    }
    else if(Str1.size()!=0)
    { S.push_back(Str1);
    Str1="";
    }
    }
    if(Str1.size()!=0)
    {
    S.push_back(Str1);
    }
    for(vector::size_type j=0;j!=S.size();++j)
    {
    vector::size_type k=0;
    while(k{
    k++;
    }
    for(;kcout<cout<<" ";
    }
    cout<return 0;
    }
    //(2)不考虑数开始的0的
    #include
    #include
    #include
    #include
    using namespace std;
    int main()
    {
    string Str,Str1;
    vector S;
    cout<<"Input your string:";
    getline(cin,Str);
    for(int i=0;i!=Str.size();++i)
    {
    if(isdigit(Str[i]))
    {
    Str1.push_back(Str[i]);
    }
    else if(Str1.size()!=0)
    { S.push_back(Str1);
    Str1="";
    }
    }
    if(Str1.size()!=0)
    {
    S.push_back(Str1);
    }
    for(int j=0;j!=S.size();++j)
    cout<cout<return 0;
    }
    字符操作函数有时候还真是少不了用,把cctype头文件里的一些贴个在下面再好好看看。

    1. isalnum(c) 如果c是字母或数字,则为true
    2. isalpha(c) 如果c是字母,则为true
    3. iscntrl(c) 如果c是控制字符,则为true
    4. isdigit(c) 如果c是数字,则为true
    5. isgraph(c) 如果c不是空格,但可打印,则为true
    6. islower(c) 如果c是小写字母,则为true
    7. isprint(c) 如果c是可打印的字符,则为true
    8. ispunct(c) 如果c是标点符号,则为true
    9. isspace(c) 如果c是空白字符,则为true
    10. isupper(c) 如果c是大写字母,则为true
    11. isxdigit(c) 如果c是十六进制数,则为true
    12. tolower(c) 如果c是大字字母,则返回其小写字母形式,否则直接返回c
    13. toupper(c) 如果c是小写字母,则返回其大写字母形式,否则直接返回c
    展开全文
  • 如何Excel插入文本型数字字符串

    千次阅读 2019-03-28 13:52:35
    Excel表,我们常常需要插入文本型的数字字符串,但是这类字符串在填入到Excel后,常常会被自动处理为数字,如我们想要填的值是“001”,而实际填入的值会变成1,这显然不是我们想要的。 如果涉及的文件少,...
  • 问题描述 在下面代码,有一句 pat = r’\d+’,那么字符串前面的r有什么意思呢? #!/usr/bin/python3 import re s = '一共20行代码运行时间13.59s' ...python在字符串前面加上 r/R , 表示后面字符串都是非
  • js数组、数字字符串之间转换 1、字符串数字数字转换 1)字符串在运算操作会被当做数字类型来处理 var s = "3265"; console.log(s *= 1); // 3265 2)字符前面加“+” var s = "3265"; console....
  • 用java判断字符串中是不是有5位定长的数字,有的话前面加空格, 没有5位定长数字或其他长度的数字则不予处理,请问大家有什么好办法?
  • 解决:绑定value值时候在前面加上冒号 不冒号:字符串; 冒号:会根据字段值来判断属性类型 ...bodyCheck.PicSize值是字符串数字,value加上冒号会判断属性类型,可以保证select框不出现数字 ...
  • 1.sql语句(排序字段后0即可变成数字进行排序) select * from student order by score+0 desc 2.说明 需求:将“90.00”这样的varchar转成数字类型进行排序 student表中的score是varchar类型(为了演示...
  • 然而,很多编程问题需要用到更小数据单元,例如字符串数字,来解决。 本章将学习几个用于操纵字符串数字的shell脚本特性。Shell提供了多种字符串操作参数扩展。除了算术扩展(第7章讲到),还有一个常见...
  • 如下获取value时候getString为null, 因为bundle把它当数字处理,可以通过getInt获取,然后转化为字符串, 也可以这样子前面加一个反斜杠和空格,get
  • 比如说我们填写年/月/日的时候,希望填写成2016/01/01而不希望出现2016/1/1,也就是说,日和月的两个数字要按我们想要的两位来显示,而不是只显示一位,如果只有一位,比如本例中的“1”,就要在前面加0,显示为...
  • js 数字字符加

    2020-04-27 17:59:53
    代码有时会遇到数字字符串相加问题 首先,需要知道,如果一个是字符串或者两个都是字符串,使用 “+”会进行拼接,而不是相加;而如果使用“-”,则会进行强制转化后做减法运算 所以,数字字符串相加之前,一定...
  • 导出CSV文件要输出一个字符串,比如00001,可是出来是1,但是如果使用'话可以正常显示出来,不知道除了使用'外还有没有别方法了呢? 解决方法:字符前面加这个((char)(9)).ToString() 就可以了
  • 没成想过了几天又开始作妖了,前面加了一堆空格一样东西 异常拦截到了一打印果真好长一 二〇二〇年一月十三日 处理 本以为是手到擒来 先用了个百度办法 这个博主说这个方法很霸道,秒杀一切 ...
  • 字符串型只要在前面加个+好就可以了。 数值型只要后面加个空字符串”“就可以了。 上图: 以上这篇js字符型和数值型数字的互相转化方法(必看)就是小编分享给大家全部内容了,希望能给大家一个参考,也希望...
  • Arduino字符串玄机

    2015-12-13 20:17:42
    调试过程遇到了很多奇怪问题,其中比较明显一个就是关于String类问题,字符串数字拼装时候,如果数字被定义为char就会出现很奇怪问题,打印出来不是可读ASCII码字符,而且字符串有可能被截断。...
  • js中字符型和数值型数字的互相转化

    千次阅读 2016-08-26 22:39:31
    数值型的数字字符型数字之间如何互相转化呢,其实有个很简便的方法:比如字符串”123.45”和数值型123.45。字符串型只要在前面加个+好就可以了。数值型只要后面加个空字符串”“就可以了。上图:
  • 近期遇到一个小任务,要求按序号(integer affix:整数前缀)从大到小顺序输出某列表所有的字符串元素。当时查了一些资料解决了,此做个记录。 一、问题描述 输入: li = ['99_A_item_b', '1_A_item_a', '...
  • 在前面:大学时没有刷过算法题迟早要补回来,计划是先去网上找一些经典算法题,如数组排序,去重等等,然后再去leetcode由简至难按照标签继续刷题,我也会博客里持续更新我刷题目,感兴趣话欢迎关注我。...
  • <p><img alt="" height="506" src=...比如6开头在前面加sh,3和0开头要加sz,就不会了。目前思考方向有update(),select(),lambda</p>
  • MySql字符串处理

    2019-11-01 20:23:32
    1. 零或者乘以1 2. mysql字符串类型编号比较,如果是数字会忽略前面的零,如果是字母开头,直接变成零
  • 作用:让字符串中的转义字符失效变成普通字符。 print('\tabcd\\abc') #abcd\abc print(r'\tabcd\\abc') #\tabcd\\abc 2. %格式字符串 格式占位符: %s -字符串(任何数据都可以用) %d -整数(必须是数字) %f ...
  • python中可以在字符串的最前面(引号前) r/R,来阻止字符串中的转义字符转义 r可以让字符串中的转义字符都变成普通字符 str1 = '\tabc\n123' print(str1) str2 = r'\tabc\n123' print(str2) 格式字符串 1)语法:...
  • 前缀字符 U,中间的数字不难看出是2013年12月20日03时23分13秒763毫秒,剩下的字符都是随机生成,且随机插入进去的,我试着运行了很多遍,每一毫秒最多生成20个这样的字符串,但是这儿是个字符串中要想其他随机生成...
  • ^:匹配字符串开头 [\+\-]:代表一个+字符或-字符 ?:前面一个字符可有可无 \d:一个数字 +:前面一个字符一个或多个 \D:一个非数字字符 *:前面一个字符0个或多个 解法二:常规判断 需要注意两个点: 1)...
  • leetcode 415.字符串相加

    2020-08-03 08:58:28
    主要思想就是将两个字符串,从末尾开始相加并考虑进位,把得到数字加到表示答案的字符串前面并更新进位。 本方法java代码示例: /*模拟数学竖式运算 *作者@v7fgg *执行用时 :19 ms, 所有 Java 提交击败了5.21%...
  • 在字符串的前引号前面加@声明,这样斜杠就不会被解释为转义了 此时如果要表示引号,就连打两个引号 一般@转义用来在写文件目录或需要在源码里换行时候用 $转义 用大括号括起来里面写变量,就不需要麻烦使用...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 308
精华内容 123
关键字:

在字符串中的数字前面加字符