2014-09-08 4 views
-2

мне нужно написать функцию, которая будет принимать строку в качестве входов и выходов, как показано нижеКак добавить число в строку в конце в c-программе?

input : aaabbdd 
output : a3b2d2 

input : aaaaaaaaaaaaaaaabbccc 
output : a16b2c3 

основном я должен добавить счетчик для каждого символа. Я не должен использовать itoa() для преобразования int в строку

Я написал логику. Но мне удавалось добавить число в строку. Например, если count равен 16, как я могу добавить число 16 до конца строки?

Моя логика приведена ниже.

#include <stdio.h> 

void str1(char *str) 
{ 
    int i, j, cnt; 

    int len = strlen(str); 

    char *nstr = (char *) malloc(len * sizeof(char)); 

    int k = 0; 
    cnt = 1; 

    for(i = 0, j = 1; i < len - 1;) 
    { 
     if(str[i] == str[j]) 
     { 
      j++; 
      cnt++; 
      continue; 
     } 
     else 
     { 
      if(cnt == 1) 
      { 
       nstr[k++] = str[i]; 
      } 
      else 
      { 
       nstr[k++] = str[i]; 
       nstr[k++] = cnt; // GOT STUCK HERE 
      } 
      i = j; 
      j = i + 1; 
      cnt = 1; 
     } 
    } 

    printf("\n%s\n", nstr); 
} 

main() 
{ 
    char str[] = "aaaaaaaaaaaaaaaabbcdd"; 

    str1(str); 
} 
+6

показать некоторый код, что вы получили, что не будет работать. – zubergu

+0

Возможный дубликат [c string и int concatenation] (http://stackoverflow.com/questions/5172107/c-string-and-int-concatenation) – Cornstalks

+0

, пожалуйста, напишите, что вы сделали до сих пор – ControlAltDel

ответ

1

Вы можете реализовать itoa самостоятельно. Логика заключается в следующем:

  • Если число равно нулю, добавьте ноль не (в вашем случае, это не должно произойти, но в общем случае это, очевидно, возможно)
  • Приготовить временный буфер для вывода. Размер зависит от количества битов в целое число, которое вы печатаете
  • магазин последней цифры, вычисляя n % 10
  • Разделите число на десять используя целочисленное деление
  • Продолжить последние три шага, пока оставшаяся часть не равна нулю
  • Append обращенной последовательности цифр из временного буфера в свой выходной

Это только один из способов реализации логики. Возможны и другие способы: например, вы можете построить таблицу поиска с десятью значениями и вычислить каждую цифру, используя комбинацию целочисленного деления и взяв остаток.

1

Весь код вам нужно, декорированный с комментариями:

if (len == 0) return; 

/* initialize */ 
char c = str[0]; 
int count = 1; 

/* include terminating '\0', and that will resolve itself! */ 
for (i = 1; i <= len; i++) 
{ 
    if (str[i] == str[i-1]) 
    { 
     /* continue sequence */ 
     count++; 
    } 
    else 
    { 
     /* end sequence */ 
     printf("%c%d", c, count); 
     /* start new sequence */ 
     c = str[i]; count = 1; 
    } 
} 
printf("\n"); /* flush buffer */ 
Смежные вопросы