एक स्ट्रिंग में हर संख्या में वृद्धि


11

दशमलव संख्या वाले स्ट्रिंग को देखते हुए:

teststring134this 123test string54 100

नई स्ट्रिंग देने के लिए इस स्ट्रिंग में हर संख्या को बढ़ाएँ

teststring135this 124test string55 101

स्ट्रिंग के रूप में प्रदान किया जा सकता है:

  • एक कमांड लाइन तर्क
  • STDIN
  • एक हार्ड-कोडित चर या फ़ंक्शन तर्क

किसी संख्या के लिए सभी संभावित पदों को कवर करें:

  • किसी शब्द के लिए उपसर्ग के रूप में; 123test124test
  • एक शब्द के लिए एक प्रत्यय के रूप में; test123test124
  • एक शब्द के अंदर; te123stte124st
  • अकेला test 123 testtest 124 test

यहाँ पायथन में एक गैर-गोल्फ समाधान है:

NUMBERS = '0123456789'

def increment(s):
    out = ''

    number = ''
    for c in s:
        if c in NUMBERS:
            number += c
        else:
            if number != '':
                out += str(int(number) + 1)
                number = ''
            out += c

    if number != '':
        out += str(int(number) + 1)
        number = ''

    return out


print "\"%s\"" % (increment('teststring134this 123test string54 100'))

यह एक code-golfसवाल है, सबसे छोटा कोड जीतता है।


5
मजेदार तथ्य: यह 3 शुद्ध रेगेक्स प्रतिस्थापन (कोई कॉलबैक नहीं) के साथ किया जा सकता है stackoverflow.com/questions/12941362/… (हालांकि यह गोल्फ का तरीका नहीं होगा)
मार्टिन

4
आपने इनपुट निर्दिष्ट किया लेकिन आउटपुट नहीं। आपके इनपुट कल्पना से मुझे लगता है कि STDOUT और वापसी मूल्य दोनों ठीक हैं। लेकिन क्या हम परिणाम को हार्डकोडेड वैरिएबल में स्टोर कर सकते हैं (जैसे हम इससे इनपुट ले सकते हैं)?
मार्टिन एंडर

1
ले जाने के बारे में क्या? क्या होता है 999?
शराबी


7
नकारात्मक संख्याओं के बारे में क्या? दशमलव बिंदु के साथ संख्याओं के बारे में क्या? दशमलव बिंदु के साथ संख्याओं के बारे में क्या है और इसके पहले कुछ भी नहीं है (शायद एक शून्य चिह्न के अलावा)?
पीटर टेलर

जवाबों:


23

पर्ल, 14 बाइट्स

s/\d+/$&+1/ge

-pस्विच की आवश्यकता है , जिसे मैंने एक बाइट के रूप में गिना है।

उदाहरण चलाते हैं

$ perl -p <(echo 's/\d+/$&+1/ge') <<< 'teststring134this 123test string54 100'
teststring135this 124test string55 101

5
मेरे जवाब के समान ही यहाँ haha codegolf.stackexchange.com/a/37113/29438
hmatt1

12

रूबी, 30 24 बाइट्स

$><<s.gsub(/\d+/,&:next)

इनपुट में संग्रहीत किए जाने की अपेक्षा करता है s


3
$1.nextब्लॉक में उपयोग नहीं किया जा सकता है?
अगस्त

@ अच्छा, धन्यवाद! मुझे नहीं पता nextथा कि यह परिष्कृत था।
मार्टिन एंडर

11

विम - 13 कीस्ट्रोक्स

0qqqqq^Al@qq@q

इनपुट को वर्तमान रेखा होने की उम्मीद है।

या 8 + छत (लॉग (n)) कीस्ट्रोक्स में कई संख्याओं (जैसे 999) के लिए:

0qq^Alq999@q

मैं इस काम को करने के लिए प्रतीत नहीं कर सकता .... (मैं vim 7.0.237 का उपयोग कर रहा हूँ)
जेरी यिर्मयाह

10

जावास्क्रिप्ट (ईएस 6) - 28

H=k=>k.replace(/\d+/g,k=>++k)

का उपयोग करके चलाएँ H("test 123 234t")


1
आप इसे बाहर निकाल सकते हैं H=और बस यह एक अनाम फ़ंक्शन हो सकता है।
मामा फन रोल

8

पर्ल, २३

माना जाता है कि इनपुट स्ट्रिंग को सौंपा गया है $_

s/\d+/@{[$&+1]}/g;print

8

अजगर 2 - 59

चर के रूप में स्ट्रिंग की आपूर्ति करें n

import re;print re.sub('\d+',lambda x:`int(x.group())+1`,n)

6

C99 - 86 (GCC 4.9.0 और विजुअल C ++ 2013)

संपादित करें: दोनों GCC 4.9.0 (-std = c99 के साथ) और विजुअल C ++ 2013 सफलतापूर्वक शामिल किए बिना (चेतावनियों के साथ) समान कोड का निर्माण करते हैं। मुझे नहीं पता था कि आप ऐसा कर सकते हैं! संकेत के लिए धन्यवाद।

संपादित करें: यह मेरे लिए भी नहीं था कि मैं इसे स्ट्रिंग बनाने और फिर इसे प्रिंट करने के बजाय फ़्लाई पर स्क्रीन पर लिखूं। इससे एक बड़ा फर्क पड़ता है। धन्यवाद डेनिस!

यह एक हार्ड कोडित स्ट्रिंग का उपयोग कर रहा है लेकिन स्ट्रिंग की सामग्री को कुल (= "" गिना जाता है) की ओर नहीं गिना जाता है।

main(i){for(char*q,*s="test123test999test-1test";i=strtol(s,&q,0),*s;q>s?printf("%d",i+1,s=q):putchar(*s++));}

मूल रूप से यह स्ट्रिंग एक चरित्र के माध्यम से चलता है, यह देखने के लिए कि यह पूर्णांक है या नहीं। यदि ऐसा है तो यह पूर्णांक को बढ़ाता है और इसे आउटपुट पर लिखता है अन्यथा यह वर्तमान वर्ण को आउटपुट में कॉपी करता है।

यह हार्डकोड स्ट्रिंग को लीक करता है क्योंकि यह वृद्धि करता है।


1
मुझे यकीन है कि आप कुछ एस से छुटकारा पा सकते हैं includeऔर यह अभी भी जीसीसी के साथ ठीक संकलन करेगा।
मार्टिन एंडर

1
यह एक स्ट्रिंग जैसे उदाहरण के साथ काम करेंगे 99?
एनाटॉलीग

@ मार्टिनबटनर: हाँ, लेकिन तब यह वैध सी नहीं होगा, बस कुछ ऐसा होगा जो जीसीसी पर काम करता है।
आर .. गिटहब स्टॉप हेल्पिंग आईसीई

@R .. कि आम तौर पर PPCG पर अनुमति दी जाती है। मैंने देखा है (और बाद में किया है) यह अक्सर बिना किसी शिकायत के।
1938 में मार्टिन एंडर

हाँ, और यह मेरा एक सामान्य पेशाब है। भाषा को "जीसीसी" या "सी पर [विशेष रूप से आर्क / आदि पर सूचीबद्ध किया जाना चाहिए। हैक काम करने के लिए होता है] या सी के बजाय, अगर यह वास्तव में वैध सी नहीं है। :-)
आर .. गिटहब स्टॉप

5

जे (20)

इनपुट को चर में संग्रहीत किए जाने की अपेक्षा करता है a

'\d+'>:&.".rxapply a

परीक्षा:

   a=:'teststring134this 123test string54 100'
   '\d+'>:&.".rxapply a
teststring135this 124test string55 101

5

(एफ) लेक्स (39)

फ़ाइल inc.l:

%%
[0-9]+ printf("%d",atoi(yytext)+1);

संकलित करें:

$ flex inc.l
$ gcc lex.yy.c -o inc -lfl

Daud:

$ echo 'teststring134this 123test string54 100' | ./inc
teststring135this 124test string55 101

$ i='(-: 2 empty bottles of beer :-)'
$ tty=$(tty)
$ for n in {2..5} ; do i=$(./inc<<<$i|tee $tty) ; done
(-: 3 empty bottles of beer :-)
(-: 4 empty bottles of beer :-)
(-: 5 empty bottles of beer :-)
(-: 6 empty bottles of beer :-)

मैंने मूल के साथ इसका परीक्षण नहीं किया lex। टिप्पणियों का स्वागत है।


1
आप %%कोई उपयोगकर्ता कोड नहीं है क्योंकि आप अनुगामी ड्रॉप कर सकते हैं : flex.sourceforge.net/manual/…
जोश

अरे ... हाँ! मैंने कोशिश की लेकिन बिना न्यूलाइन को ट्राई किए और वह फेल हो गई ... फिर मैंने अंतिम न्यूलाइन ...; ;-) ... मूर्खतापूर्ण गलती को जोड़ने की कोशिश नहीं की!

3

Emacs - 20 वर्ण

C-M-% [0-9]+ RET \,(1+ \#0) RET !

वर्तमान बफ़र में मौजूद होने के लिए पाठ को संसाधित करने की आवश्यकता होती है। मैंने CM-% को एक वर्ण के रूप में यहाँ गिना है क्योंकि तीन संशोधक रखने पर इसे एक कीस्ट्रोक के साथ प्रविष्ट किया जा सकता है।


3

GNU sed, 304 (1 फ़ॉर-आर फ़्लैग सहित)

मैंने इस प्रश्न को संभावित डुप्लिकेट के रूप में बंद कर दिया था, लेकिन यह संभवतः इसके विपरीत है क्योंकि इस उत्तर को तुच्छ रूप से वहां काम करने के लिए नहीं बदला जा सकता है। हालांकि अब तक का सबसे लंबा जवाब है।

इस उदाहरण से प्रेरित होकर sed प्रलेखन , हालांकि यह एक स्ट्रिंग में कई संख्याओं को संभालने के लिए कुछ काम की जरूरत है:

:d
s/9([^0-9]+|$)/_\1/g
td
s/8(_*)([^0-9]+|$)/9\1\2/g
s/7(_*)([^0-9]+|$)/8\1\2/g
s/6(_*)([^0-9]+|$)/7\1\2/g
s/5(_*)([^0-9]+|$)/6\1\2/g
s/4(_*)([^0-9]+|$)/5\1\2/g
s/3(_*)([^0-9]+|$)/4\1\2/g
s/2(_*)([^0-9]+|$)/3\1\2/g
s/1(_*)([^0-9]+|$)/2\1\2/g
s/0(_*)([^0-9]+|$)/1\1\2/g
s/(^|[^0-9_]+)(_+)/\11\2/g
y/_/0/

आउटपुट:

$ for s in "teststring134this 123test string54 100" "123test" "test123" "te123st" "test 123 test" ; do echo "$s" | sed -rf incr.sed ; done
teststring135this 124test string55 101
124test
test124
te124st
test 124 test
$ 

ध्यान दें कि यह अस्थायी रूप से _वर्ण सम्मिलित करता है, इसलिए _इनपुट स्ट्रीम में होने पर गलत परिणाम हो सकते हैं । इसे एक शमन के रूप में, हम _कुछ गैर-मुद्रण योग्य वर्ण (जैसे ASCII 0x07 बीईएल) के साथ sed स्क्रिप्ट में बदल सकते हैं , और मान लें कि इनपुट स्ट्रीम में केवल मुद्रण योग्य ASCII है। जब मैं इसका परीक्षण करता हूं तो यह ठीक काम करने लगता है।



2

लुआ - 68 वर्ण

d='(%D-)'for k,i,j in s:gmatch(d..'(%d+)'..d)do io.write(k,i+1,j)end

इनपुट के एस में संग्रहीत होने की उम्मीद है।


2

CJam, 67 58 53 48 31 अक्षर

यह सवाल सीजेएम के लिए सबसे खराब सवाल जैसा है। कोई रेगेक्स, कोई पैटर्न मिलान, कोई अपवाद नहीं पकड़ रहा है। लेकिन यहां हम जाते हैं (#YOLO)

Sl+_A,sNerN%\[_A,s-Ner~]:)]zs1>

यह एक अक्षर को सिर्फ वर्णमाला और सिर्फ अंकों के समूह में विभाजित करता है। प्रत्येक अंक में वृद्धि होती है और एक समय में प्रत्येक के एक तत्व को लेते हुए दो सरणी को पीछे ले जाती है।


पिछला समाधान:

L_l{:Ci57-zA<:RC*+:N\R!N*NNW?i):NL?+RLC?@R*}/NL?

इसे यहाँ ऑनलाइन आज़माएँ

यह काम किस प्रकार करता है:

मूल विचार यह है कि यदि यह एक अंक है तो चरित्र को एक स्ट्रिंग में अलग से संग्रहीत करना है और एक गैर अंक चरित्र प्राप्त करने के बाद अंतिम स्ट्रिंग में बढ़े हुए मूल्य को डंप करें।

L_                                               "Push two empty strings to stack,"
                                                 "first representing the final string"
                                                 "and second, the current ongoing number";
  l{                                       }/    "Run this block for each character of input string";
    :Ci                                          "Store the character to C and convert to"
                                                 "its ASCII equivalent integer";
       57-zA<:R                                  "Subtract 57 from the integer and compare"
                                                 "its absolute value with 10. Numeric character"
                                                 "would result to true here. Store the result in R";
               C*+:N                             "Take either 0 or 1 characters from C based"
                                                 "on value of R, add it to the second string"
                                                 "from first step. Also store the value in N";
                    \                            "Switch the strings. Now the string containing"
                                                 "the final result string is at top of stack";
                     R!N*                        "If the character was not a digit and N contains a number in it";
                         NNW?i):NL?+             "Convert N to number and increment it."
                                                 "If N is blank, take 0 instead. Put the final"
                                                 "value back in N and add it to the final result string";
                                    RLC?         "If the character was not a digit, push it to stack";
                                        @R*      "Put the ongoing numeric string back to top of stack";
                                             NL? "This is to handle the case when the last number"
                                                 "is not followed by a string, so stack will"
                                                 "have a string at top. Push the value of N to stack in that case";

1

कोबरा - 88

do(s='')=RegularExpressions.Regex.replace(s,'\d+',do(m as Match)='[int.parse("[m]")+1]')

1

सी # - 178 169 157 वर्ण

यह मानता है कि 999 जैसी संख्याओं को 000 तक ओवरफ्लो करने की अनुमति है और वह - +, ई किसी संख्या का हिस्सा नहीं है।

class T{static void Main(){var a="".ToCharArray();for(int b=1,c,i=a.Length;i-->0;b=48>c|c>57?7:b>0?c>56?a[i]='0':++a[i]*0:b)c=a[i];System.Console.Write(a);}}

बेहतर पठनीय रूप:

class T
{
    static void Main()
    {
        var a="7teststring134this 123test string59 100".ToCharArray();

        for (int b=3, c, i=a.Length; i-->0;
            b=48>c|c>57
                ?7
                :b>2
                    ?c>56?a[i]='0':++a[i]*0
                    :b
        ) c=a[i];

        System.Console.Write(a);
        System.Console.ReadKey();
    }
}

मैं यहाँ नया हूँ, पहले कभी कोड गोल्फ की कोशिश नहीं की, बस इसे आज़माया :)

मुझे आश्चर्य है कि अगर किसी के पास इसे और भी छोटा करने के लिए विचार हैं ...

सी # के साथ भाग लेने के लिए यह अच्छा होगा अगर हम वास्तविक कोड के चारों ओर सभी आवश्यक ढांचे को छोड़ सकते हैं - तो इसमें केवल 82 वर्ण होंगे, और यह कि किसी भी शक्तिशाली सिस्टम फ़ंक्शन को कॉल किए बिना।


संकेत के साथ एक ही (182 वर्ण):

class T
{
    unsafe static void Main()
    {
        char[] a="7teststring134this 123test string59 100".ToCharArray();

        int b=3;
        fixed (char* s=&a[0])
            for (var p=s+a.Length; p-->s; )
                b=*p<48|*p>57
                    ?7
                    :b>2
                        ?*p>56?*p='0':++*p*0
                        :b;

        System.Console.Write(a);
        System.Console.ReadKey();
    }
}

अब अतिप्रवाह के बिना, यह सही ढंग से 999 मामले (223 वर्ण) को संभालता है:

class T
{
    static void Main()
    {
        var s=new System.Text.StringBuilder("9999teststring134this 123test string99 100");

        for (int b=3, c, i=s.Length; i-->0; )
        {
            c=s[i];
            b=48>c|c>57
                ?b>8?8:7
                :b>2
                    ?c>56?c-(s[i]='0'):++s[i]*0
                    :b;
            if (b>8&i<1|b==8) s.Insert(i+9-b, '1');
        }

        System.Console.Write(s);
        System.Console.ReadKey();
    }
}

एक और अलग पुराने, यह मानक इनपुट से पढ़ता है और पुनरावर्तन का उपयोग करता है:

namespace System {
    using C=Console;
    class T {
        class t {
            byte b=1;
            string s="";
            void R() {
                var c=C.Read();
                if (c>31) {
                    R();
                    if (48>c|c>57) b=1;
                    else if (b==1) c=c==57?48:++c*b--;
                    s=(char)c+s;
                }
            }
            public t() {
                R();
                C.Write(s);
            }
        }
        static void Main() {
            new t();
            C.ReadKey();
        }
    }
}

ध्यान दें: Console.ReadKey(); और स्ट्रिंग को स्वयं गिना नहीं जाना चाहिए।

मैंने पहले ही कई बार इसमें सुधार किया, टिप्पणियां देखें। अधिक सुधार के लिए अभी भी जगह है, मैं कहूंगा :) और लंबाई के लिए खेद है, लेकिन मुझे लगता है कि अलग-अलग संस्करण उन्हें रखने के लिए काफी दिलचस्प हैं ...


नहीं, "पर्यावरण" से छुटकारा पाने की अनुमति नहीं है। मैं अपने दूसरे कोड में लगता है के बाद if(c==57)आप लिख सकते हैं c--;के बजाय c=48;बहुत त्रिगुट ऑपरेटर के बारे में, क्या। वहाँ गोल्फ की बहुत सारी चाल है। हो सकता है आप की यात्रा करनी चाहिए codegolf.stackexchange.com/questions/2203/tips-for-golfing-in-c
गर्व haskeller

धन्यवाद, मुझे पता है कि गोल्फ के बारे में कुछ भी नहीं है :) जो कुछ भी आप यहाँ देख रहे हैं वह मेरे द्वारा आविष्कार किया गया था; ;-) 57-1 48 नहीं है। इसलिए मुझे समझ नहीं आया।
माफ़-सॉफ्ट

उफ़ :-) :-) :-) :-)
हेकेलर

मैं वास्तव में सी # अच्छी तरह से नहीं जानता, लेकिन मुझे लगता है कि आप कुछ ऑपरेटर का उपयोग करके उन्हें एक साथ चिपका सकते हैं जैसे... ? ... : c++*b--
गर्व हैकर सेपर

B # सी टिप्स के बदले आपको C टिप्स भेजने के लिए खेद है: codegolf.stackexchange.com/questions/173/…
गर्वित हैकेलर

1

ग्रूवी, 38 बाइट्स

{it.replaceAll(/\d+/,{(it as int)+1})}

उग्घ्घ ... मुझे शब्दों से बिल्कुल नफरत है replaceऔर all, उन्होंने मेरे लिए सभी रेगेक्स गोल्फ को बर्बाद कर दिया।


1
(it as int)+1it.next()
मैनटवर्क

0

PHP - 91 बाइट्स

<?$i=fgets(STDIN);for($n=0;$n<strlen($i);$n++)if(is_numeric($i[$n]))$i[$n]=$i[$n]+1;echo$i;

मैं नियमित अभिव्यक्ति का उपयोग नहीं करना चाहता था। PHP एक स्ट्रिंग ऑफसेट को सीधे बढ़ाने में सक्षम नहीं है, इसलिए, मुझे वेतन वृद्धि कदम पर कुछ बाइट्स जोड़ने की आवश्यकता है। यह एक पंक्ति की स्क्रिप्ट मुझे PHP स्क्रिप्टिंग के एक बहुत ही अंधेरे युग को याद करती है ...


मैंने अभी देखा है कि प्रश्न आपको अल्गारिज़्म के अनुक्रम के परिणाम संख्या को बढ़ाने के लिए कहता है। यह उत्तर गलत है। लेकिन मुझे वास्तव में लगता है कि ऑप को और अधिक विवरण जोड़ना चाहिए जो वह चाहता है।
अलेक्जेंड्रे टेल्स


0

सेड और बैश - 40 (मंगलाचरण और पाइप सहित)

$ cat << EOF |sed 's/[0-9]\+/$((\0+1))/g;s/^/echo /'|bash
teststring134this 123test string54 100
123test
test123
te123st
test 123 test
EOF

आउटपुट:

teststring135this 124test string55 101
124test
test124
te124st
test 124 test

मैंने इस परीक्षण स्ट्रिंग की कोशिश की: 42;rm -rf /इसने पहली बार काम किया।
डेनिस

2
आप बदल सकते हैं \0करने के लिए &(-1 वर्ण), $((…))करने के लिए $[…](-2 वर्ण), s/^/echo /करने के लिए iecho \\अपने को छोटा करने के (-2 वर्ण) वर्तमान कोड। हालांकि पहले @ डेनिस द्वारा उल्लिखित बग को बेहतर ढंग से ठीक करें। (उन्होंने लिखा है मनोरंजन के लिए और इस मुद्दे के बारे में संकेत के रूप में "यह पहली बार काम किया" वास्तव में अपने कोड इनपुट पर विफल रहता हैं। ;, #, `…`, $(…)भी और शायद अन्य विशेष वर्ण।)
manatwork

मनमाना कोड निष्पादन एक विशेषता है :-)
mgjk

कुछ प्रकार के इनपुट प्रतिबंधों और कोड को छोटे रखने के बिना इस मार्ग पर जाने का कोई तरीका नहीं हो सकता है। समाधान की प्रकृति इनपुट का अनुवाद करना है और गणित करने के लिए एक दुभाषिया का उपयोग करना है क्योंकि sed ऐसा नहीं कर सकता है। जैसे ही उपयोगकर्ता इनपुट एक दुभाषिया को हिट करता है, भागने में पागल होता है। पिछले sed उदाहरण के लघु, sed गणित नहीं कर सकता।
mgjk

कुछ हद तक कम: eval echo `sed 's/[0-9]\+/$[&+1]/g'`- अभी भी कोड इंजेक्शन की समस्या है, हालांकि मेरे जवाब के अनुसार एक और इसी तरह के प्रश्न के लिए codegolf.stackexchange.com/a/37145/11259
डिजिटल ट्रॉमा

0

जावा 7, 119 बाइट्स

void c(String s){for(String x:s.split("(?=[^\\d]+)|(?<=[^\\d]+)"))System.out.print(x.matches("\\d+")?new Long(x)+1:x);}

यदि आवश्यकता केवल एक फ़ंक्शन के बजाय एक कार्यक्रम है, तो यह 149 बाइट्स है:

class M{public static void main(String[]a){for(String x:a[0].split("(?=[^\\d]+)|(?<=[^\\d]+)"))System.out.print(x.matches("\\d+")?new Long(x)+1:x);}}

Ungolfed और परीक्षण कोड:

इसे यहाँ आज़माएँ।

class M{
  static void c(String s){
    for(String x : s.split("(?=[^\\d]+)|(?<=[^\\d]+)")){
      System.out.print(x.matches("\\d+")
                        ? new Long(x) + 1
                        : x);
    }
  }

  public static void main(String[] a){
    c("123test");
    System.out.println();
    c("test123");
    System.out.println();
    c("te123st");
    System.out.println();
    c("test 123 test");
    System.out.println();
    c("7teststring134this 123test string59 100");
  }
}

आउटपुट:

124test
test124
te124st
test 124 test
8teststring135this 124test string60 101


0

DASH , 16 बाइट्स (नॉनकमेटिंग)

rstr[R"\d+""g"+1

यह एक फ़ंक्शन / आंशिक अनुप्रयोग देता है।

उपयोग:

rstr[R"\d+""g"+1]"test 123 234t"

व्याख्या

rstr[          #. replace any parts of the input
  R "\d+" "g"  #. matching /\d+/g
  +1           #. with its incremented form
]

क्या यह जवाब गैर-प्रतिस्पर्धी है?
डेनिस

ओह चीर :( मैंने किसी तरह सोचा कि यह एक कैटलॉग प्रश्न था।
मामा फन रोल

0

सीजाम, 18 बाइट्स

q_A,s-_:(:`ers~]:)

इसे यहाँ आज़माएँ।

व्याख्या

q         e# Read input.
_A,s-     e# Duplicate and remove digits.
_         e# Duplicate.
:(:`      e# Decrement and get the string representation of each character.
er        e# Map the characters to the decremented string representation.
s~        e# Flatten to string and evaluate.
]:)       e# Wrap in an array and increment each element.

0

आर, 83 बाइट्स

पार्टी के लिए देर से। मान लेता है कि इनपुट वेरिएबल में संग्रहित है x। इसे regmatchesहल करने के लिए शायद इसका उपयोग करने की आवश्यकता नहीं है, लेकिन मैं किसी भी बाहरी पैकेज के बिना वेक्टर किए गए प्रतिस्थापन का पता नहीं लगा सकता।

paste0(el(r(x,m<-gregexpr("\\d+",x),T)),c(as.numeric(el(r(x,m)))+1,""),collapse="")

अनगढ़ और समझाया गया

r=regmatches                                        # Alias for regmatch
y=r(x<-scan(,""),m<-gregexpr("\\d+",x))             # return match digits
i=r(x,m,T)                                          # return inverted match (non-digits)
paste0(el(i),c(as.numeric(el(y))+1,""),collapse="") # join digits+1 and non-digits, element-wise

उदाहरण आउटपुट

input: 
"teststring135this 124test string55 101"

output:
[1] "teststring136this 125test string56 102"

0

कमांड लाइन विकल्प के साथ सी # (विजुअल सी # इंटरएक्टिव कंपाइलर)/u:System.Text.RegularExpressions.Regex;System.Int32 , 40 बाइट्स

Replace(n,"\\d+",m=>Parse(m.Value)+1+"")

N नाम के एक चर में इनपुट होने की उम्मीद है।

इसे ऑनलाइन आज़माएं!


2
अमान्य, एक चर में इनपुट की उम्मीद नहीं कर सकता है
ASCII-only

@ ascii- केवल यह प्रश्न स्पष्ट रूप से इसकी अनुमति देता प्रतीत होता है 'हालांकि व्यक्तिगत रूप से, मैं आज के इनपुट मानकों पर टिकने की कोशिश करूंगा
जो किंग

ओह रुको: / ईव इस सवाल
केवल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.