#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的不同类型” 什么方法可以使它工作?
答案 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);
请注意第二种情况,因为您再也无法使用字符串函数(例如strcat
,strcpy
,...)
答案 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增加 字符大小。