2015-12-03 3 views
0

Мой код получает строку символов. Например, «aaabbdddd» Функция вставляет в новую строку буквы и количество раз, когда они появляются. Таким образом, вывод для этой конкретной строки должен быть «a3b2d4». Мой вопрос: как вставить числа в строку? Я попытался использовать itoa и преобразовал всю строку в один номер. Вот мой код:В C, как вставить целое число в строку?

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define LONG 80 
#define SHORT 20 
void longtext(char longtxt[LONG], char shorttxt[SHORT]) 
{ 
    int i, j=0, count=0, tmp; 
    char letter; 
    for (i = 0; i <= strlen(longtxt); ++i) 
    { 
     if (i == 0) 
     { 
      letter = longtxt[i]; 
      ++count; 
     } 
     else if (letter == longtxt[i]) 
      ++count; 
     else 
     { 
      shorttxt[j] = letter; 
      shorttxt[j + 1] = count; 
      j += 2; 
      count = 1; 
      letter = longtxt[i]; 
     } 
    } 
} 
int main() 
{ 
    char longtxt[LONG] = "aaabbdddd",shorttxt[SHORT]; 
    longtext(longtxt,shorttxt); 
    printf("%s", shorttxt); 
} 

Я считаю, что проблема заключается в строке "shorttxt [J + 1] = кол;" потому что thats, где я хочу поместить int в строку.

+0

Пожалуйста, удалите тег 'C++'. – Kotshi

+0

Вы попробовали мой ответ ниже? – GNKeshava

ответ

2

Вы правы, проблема линия:

shorttxt[j + 1] = count; 

Изменить это:

shorttxt[j + 1] = count + '0'; 

И вы должны быть хорошо.

Причина в том, что вы не хотите, чтобы сам номер в строке, но символ, представляющий число. Добавление значения ascii для символа 0 к фактическому числу дает правильный результат.

+0

Спасибо! оно работает! теперь мне просто нужно выяснить, как избавиться от талисмана после желаемого выхода: D – mrpink121

+0

Отлично! Вот подсказка для части тарабарщины: Строки в C заканчиваются нулем. – harald

+0

, но я определил, что i <= strlen (longtxt). Вывод - это желаемая строка, тарабарщина и строка «longtxt». Мне нужен только короткий текст. – mrpink121

0

Попробуйте этот код, он использует snprintf, чтобы преобразовать целое число в строку.

ПРИМЕЧАНИЕ: Вам может понадобиться увеличить размер от 2, если количество превышает размер символов.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define LONG 80 
#define SHORT 20 
void longtext(char longtxt[LONG], char shorttxt[SHORT]) 
{ 
    int i, j=0, count=0, tmp; 
    char letter; 
    for (i = 0; i <= strlen(longtxt); ++i) 
    { 
     if (i == 0) 
     { 
      letter = longtxt[i]; 
      ++count; 
     } 
     else if (letter == longtxt[i]) 
      ++count; 
     else 
     { 
      shorttxt[j] = letter; 
      snprintf(&shorttxt[j + 1],2,"%d",count); 
      j += 2; 
      count = 1; 
      letter = longtxt[i]; 
     } 
    } 
} 
int main() 
{ 
    char longtxt[LONG] = "aaabbdddd",shorttxt[SHORT]; 
    longtext(longtxt,shorttxt); 
    printf("%s", shorttxt); 
} 
+0

попробовал, но это сбой программы. когда я попытался отладить строку после строки, она столкнулась с ошибкой в ​​цикле. – mrpink121

+0

@ user5633902 Я не понимаю, почему он падает. Но проверьте эту ссылку: https://ideone.com/YuN2qu. Там она дает правильный результат ... хмм – GNKeshava

Смежные вопросы