2012-10-09 20 views
0

假設我有一個字符串值「110099」,並且我需要以x的步長遞增子串值「00」直到y,並且如果x = 10且y = 90則換行爲零,即「111099 「,」112099「...和」119099「之後,字符串值爲」110099「。任何人都可以請幫助我如何開始。謝謝你的時間。編號: 更改爲通用的問題。在一個字符串中的子串增量

+0

一種選擇是隻是做長加(add,檢查隨身攜帶,並繼續到下一個數字)。另一種選擇是以int形式存儲,並且每次都轉換爲數字。 – nhahtdh

+0

只是繼續添加1000? – jon

回答

2
  1. 取出想要增加的子串。
  2. 將其轉換爲整數值。
  3. 增加10,然後增加100。
  4. 投回到字符串。
  5. 將其替換回原始字符串中。

    代碼很簡單。

+0

非常感謝... –

0

只是增加了第三個「數字」:

char s[] = "110099"; 

for (; ;) 
{ 
    printf("Current value: %s\n", s); 

    if (s[2] == '9') { s[2] = '0'; break; } 
    ++s[2]; 
} 

這是假設你的角色在上升範圍內連續設置商店的數字。

+1

應該是「0」而不是「0」。 –

+0

@AlexeyFrunze:當然 - 謝謝! –

1

"00"該規範是誤導性的,因爲它是唯一一個需要改變(在"00"第二0從不改變)字符串中的第三個字符。它可以增加一個char因此如果第三char不等於9然後增加它,否則將其設置爲0

char a[] = "110099"; 

for (int i = 0; i < 20; i++) 
{ 
    a[2] = ('9' == a[2]) ? '0' : a[2] + 1; 
    printf("%s\n", a); 
} 

見演示在https://ideone.com/uMyfo

2

由於您只需要檢查和更改一個數字,我會直接在字符串表示中進行。

也許是這樣的:以上

#define INCR_INDEX 2 

int increment(char *value) 
{ 
    if(value[INCR_INDEX] == '9') 
    { 
    value[INCR_INDEX] = '0'; 
    return 1; 
    } 
    ++value[INCR_INDEX]; 
    return 0; 
} 

做增量,並返回1如果它包裹,0如果事實並非如此。

這是安全的相對於編碼100%,C保證主機環境編碼在相鄰位置的十進制數字,所以++上的char保持任何位數小於9總是會生成下一個數字。

0

這是微不足道的:

#include <stdio.h> 

void incDigit(char* str, size_t pos) 
{ 
    if (++str[pos] > '9') 
    str[pos] = '0'; 
} 

int main(void) 
{ 
    char str[] = "110099"; 
    int i; 

    printf("Original: %s\n", str); 

    for (i = 1; i <= 10; i++) 
    { 
    printf("Adding 1... "); 
    incDigit(str, 2); 
    printf("%s\n", str); 
    } 

    return 0; 
} 

輸出(ideone):

Original: 110099 
Adding 1... 111099 
Adding 1... 112099 
Adding 1... 113099 
Adding 1... 114099 
Adding 1... 115099 
Adding 1... 116099 
Adding 1... 117099 
Adding 1... 118099 
Adding 1... 119099 
Adding 1... 110099 
0

這不是完全清楚你要如何靈活這是。解決您當前的問題可能是以下功能。

void increment(char str*) { 
    str[2]++; 
    if (str[2]>'9') str[2]='0'; 
} 

測試:

char str[] = "110099"; 
for (int i = 0; i < 12; i++) { 
    increment(str); 
    printf("%s\n", str); 
} 

結果:

111099 
112099 
113099 
114099 
115099 
116099 
117099 
118099 
119099 
110099 
111099 
112099 
相關問題