我有一個任務要做。我必須使用字串。我將向您展示輸入和輸出,因為我認為這將清楚任務是什么。
輸入:“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("%s\n", 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] != '\0'; 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 檔案。
編輯: 當我現在編譯這個程式時,我得到了 a$3 b$2v$4vo的輸出。
uj5u.com熱心網友回復:
對于初學者來說,這個宣告在 main
char string[CAPACITY];
沒有意義。
您應該在使用它們的范圍內宣告變數。
該變數string用于Output應該宣告它的函式中。
該函式changeString應宣告為
void changeString( const char string[], char newString[]);
因為源字串在函式內沒有改變。
您的函式有幾個錯誤。
例如,它不會在陣列中構建字串,newString因為它不會將存盤的序列附加到陣列中以終止零字符'\0'。
其次,這個變數的增加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 = '\0';
}
int main( void )
{
char string[CAPACITY] = "aaa bbuvvvvo";
char newString[CAPACITY];
changeString( string, newString );
puts( newString );
}
程式輸出為
a$3 b$2uv$4o
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523663.html
上一篇:學習C基礎知識并需要一些幫助:
