配列の中の特定の文字を削除して詰めるには
Posted: 2018年1月28日(日) 08:40
これだけでは何とも…。lily さんが書きました: 上手くいきません。
たぶんダメでしょうね。空きができた箇所から後ろのデータを「すべて」1個前へ詰めないと…。lily さんが書きました: 詰めるというのは配列の要素に一つ隣の要素を代入するではダメなのでしょうか?
main を含むコードを書いてください。lily さんが書きました: これでも上手く動きません。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void processFile(char *array, int *size);
void cipher(char *array, int size);
void outputCode(char *array, int size);
FILE *fpIn,*fpOut;
int main(void){
char array[300];
int size=0;
fpOut=fopen("csis.txt","w");
processFile(array,&size);
cipher(array,size);
outputCode(array,size);
fclose(fpOut);
return 0;
}
void processFile(char *array,int *size){
int i,k=0;
if (!(fpIn=fopen("congress.txt","r"))){
printf("congress.txt could not be opened.");
}
fgets(array,300,fpIn);
for (i=0;i<300;i++){
if (array[i]>=97&&array[i]<=122){
array[i]=array[i]-32;
}
else if (array[i]>=65&&array[i]<=90){
array[i]=array[i];
}
else{k=i;
for (i=i;i<300;i++){
array[i]=array[i+1];
}i=k;
}
}
*size=strlen(array);
}
void cipher(char *array, int size){
int i,k=1;
for (i=0;i<size;i++){
if ((array[i]+k)>90){
array[i]=array[i]+k-26;
}
else{
array[i]=array[i]+k;
}
}
}
void outputCode(char *array, int size){
int i;
for (i=0;i<size;i++){
if (i%5==0&&i!=0&&i%50!=0){
printf(" %c",array[i]);
}else if (i%50==0&&i!=0){
printf("\n%c",array[i]);
}else{
printf("%c",array[i]);
}
}
printf("\n");
}
void processFile(char *array, int *size)
{
int i, k = 0;
fpIn = fopen("congress.txt", "r");
if (!fpIn) {
puts("congress.txt could not be opened."); *size = 0; return;
}
if (fgets(array, 300, fpIn) == NULL) {
puts("no data"); *size = 0; return;
}
for (i = 0; array[i] != '\0'; i++)
if (array[i] >= 'a' && array[i] <= 'z')
array[k++] = array[i] - ('a' - 'A');
else if (array[i] >= 'A' && array[i] <= 'Z')
array[k++] = array[i];
array[k] = '\0';
*size = k;
}