在C中将字符串与int连接

时间:2015-12-03 12:19:53

标签: c string int strcat

#include <stdio.h>
#include <string.h>
int main(void)
{
    //declaring variables
    int num[10], action;
    char longText[80], shortText[80] = { 0 };

    //Program's Main menu
    printf("You can use the following options:\nPlease select your desired action.\n");
    scanf("%d", &action);
    switch (action) //All of the possible options for the user
    {
        case 1:
        {
            switchIf(num);
            break;
        }
        case 2:
        {
            newNumbers(num);
            break;
        }
        case 3: 
        {
            longToShortText(longText, shortText);
            break;
        }
    }
}
void longToShortText(char longText[], char shortText[])
{
    int i, j = 0, counter = 1, size;
    printf("Please enter a series of letters.\n");
    scanf("%s", longText);
    size = strlen(longText);
    for (i = 0; i < size; ++i)
    {
    if (longText[i] == longText[i + 1])
        ++counter;
    else
    {
        shortText[j] = longText[i];
        strcat(shortText[j], counter); // i know this is wrong, but i couldn't make it work with another string either.
        printf("%c", shortText[j]);
        counter = 1;
        ++j;
    }
}

} 这是我的代码的一部分,该函数获取一组字符(即:aaabbbccc),并且它假设计算每个字符输入的次数,然后它将字母发送到另一个字符串,然后我想连接计数器的将值转换为shortText [j],然后程序崩溃。 (在erorr列表中给出的错误是“'strcat':正式和实际参数1/2的不同类型” 什么方法可以使它工作?

2 个答案:

答案 0 :(得分:0)

两种可能的方式。对于案例"aaabb"

如果你想要&#34; a3b2&#34;:

shortText[j] = longText[i];
++j;
char aux[20];
sprintf(aux, "%d", counter);
printf("aux: %s, j: %d\n", aux, j);
strcat(shortText+j, aux);
counter = 1;
j += strlen(aux);

如果你想要&#34;一个\ 0 \ 0 \ 0 \ 3b \ 0 \ 0 \ 0 \ 2&#34; (示例假设为4个字节int)

shortText[j] = longText[i];
++j;
memcpy(shortText+j, &counter, sizeof(counter));
printf("%c, %d, %d, %d\n", shortText[j-1], counter, sizeof(counter), j);
counter = 1;
j += sizeof(counter); 

请注意第二种情况,因为您再也无法使用字符串函数(例如strcatstrcpy,...)

答案 1 :(得分:0)

我今天试过answering a similar question

请参阅我在那里回答的以下代码,并检查它是否对您有帮助。

代码输出为a3b2d4

#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);
}
  

注意:如果计数超过a,您可能需要将大小从2增加   字符大小。