我有任务要做。我必须使用字符串。我将向您展示输入和输出,因为我认为这将清楚地说明任务是什么。
输入: "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