如何将一个字符串更改为另一个具有不同大小的字符串



我有任务要做。我必须使用字符串。我将向您展示输入和输出,因为我认为这将清楚地说明任务是什么。

输入: "aaa bbuvvvvo">

输出:"a$3 b$2uv$4o">

如果有相同的符号,我必须保留该符号,然后输入美元符号"$"和有多少相同符号的整数。我被困在现场,我必须在不丢失任何信息的情况下更改字符串。

我将把我的代码留在这里,它可能会有所帮助。

#include <stdio.h>
#include <string.h>
#define CAPACITY 255
#define MAX_NUMBER 10
void Output(char readFile[], char outputFile[], char string[]);
void changeString(char string[], char newString[]);
int main() {
char readFile[CAPACITY];
char outputFile[CAPACITY];
char string[CAPACITY];
// Input file's name
printf("Iveskite teksto failo varda: ");
scanf("%s", &readFile);
// Output file's name
printf("Iveskite teksto faila i kuri bus isvedamas atsakymas: ");
scanf("%s", &outputFile);

Output(readFile, outputFile, string);
return 0;
}
// Scanning file
void Output(char readFile[], char outputFile[], char string[])
{
char newString[CAPACITY];
FILE *input, *output;
input = fopen(readFile, "r");
while(fscanf(input, "%s", string) != EOF)
{
changeString(string, newString);
printf("%sn", newString);
}
}
// Changing string to wanted string
void changeString(char string[], char newString[])
{
char number[MAX_NUMBER];
int symbols = 0;
int j;
for(int i = 0; string[i] != ''; ++i)
{
int temp = i;
newString[i] = string[i];
if(newString[i] == string[i + 1])
{
j = i;
while(string[j] == string[i])
{
++symbols;
++j;
}
// Changing int to char
sprintf(number, "%d", symbols);
newString[i + 1] = '$';
i += 2;
newString[i] = number[0];
symbols = 0;
}
}
}

我尝试使用名为changeString的函数来做到这一点,但我总是得到错误的输出。我也得到.txt输入来自文件。

编辑:当我现在编译这个程序时,我得到一个$ 3 b $ 2v $ 4vo输出。

对于初学者来说,这个声明在 main

char string[CAPACITY];

没有意义。

您应该在使用变量的作用域中声明变量。

变量string用于函数中,Output应声明它的位置。

函数changeString应该声明为类似

void changeString( const char string[], char newString[]);

因为源字符串在函数中没有更改。

您的函数有几个错误。

例如,它不会在数组newString中构建字符串,因为它不会在数组中附加以终止零字符''的存储序列。

其次,变量i的增加

i += 2;

一般来说是无效的。您需要i变量中添加源字符串中重复字符的数量。

或者重复字符数的变化大于或等于 10。在本例中,此语句

newString[i] = number[0];

不会产生正确的结果。

该函数可以按以下方式定义,如下面的演示程序所示。

#include <stdio.h>
#define CAPACITY 255
void changeString( const char string[], char newString[] )
{
while ( *string )
{
*newString++ = *string;
size_t n = 1;
while (*++string == *( newString - 1 ) ) ++n;
if (n != 1)
{
*newString++ = '$';
int count = sprintf( newString, "%zu", n );
newString += count;
}
}
*newString = '';
}
int main( void )
{
char string[CAPACITY] = "aaa bbuvvvvo";
char newString[CAPACITY];
changeString( string, newString );
puts( newString );
}

程序输出为

a$3 b$2uv$4o

相关内容

  • 没有找到相关文章

最新更新