如何在不使用数组的情况下计算C中的相同字符
我一直在处理以.txt文件编写的数据,因此遇到了一些问题如何在不使用数组的情况下计算C中的相同字符,c,char,C,Char,我一直在处理以.txt文件编写的数据,因此遇到了一些问题 Example of data: lettts ddo ttttthis Example of answer: le3ts 2do 5this 我尝试读取了2次信息,第二次忽略第一个字符,并在读取函数下面与for循环if(char1==char2)count++进行比较1) printf(“%d”,计数); ch2&&putchar(ch2);//如果(ch2)putchar(ch2); 如果(ch==EOF) 打破 计数=1; ch2
Example of data: lettts ddo ttttthis
Example of answer: le3ts 2do 5this
我尝试读取了2次信息,第二次忽略第一个字符,并在读取函数下面与for循环if(char1==char2)count++进行比较但它所做的只是使所有字符相等。
有没有关于如何正确比较字符的建议
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch,ch2,chvoid;
int i,num=0,num2=0;
FILE *fp;
if (fp = fopen("file.txt", "r"))
{
while (ch != EOF)
{
ch = getc(fp);
printf("%c", ch);
}
fclose(fp);
}
if (fp = fopen("file.txt", "r"))
{
chvoid = getc(fp);
while (ch2 != EOF)
{
ch2 = getc(fp);
printf("%c", ch2);
num++;
}
fclose(fp);
}
for(i=1;i<num;i++){
if(ch!=ch2){
printf("test");
}
if(ch==ch2){
num2++;
printf("%d ",num2);
}
num2=0;
}
return 0;
}
#包括
#包括
int main()
{
char ch,ch2,chvoid;
int i,num=0,num2=0;
文件*fp;
如果(fp=fopen(“file.txt”,“r”))
{
while(ch!=EOF)
{
ch=getc(fp);
printf(“%c”,ch);
}
fclose(fp);
}
如果(fp=fopen(“file.txt”,“r”))
{
chvoid=getc(fp);
而(ch2!=EOF)
{
ch2=getc(fp);
printf(“%c”,ch2);
num++;
}
fclose(fp);
}
对于(i=1;i可能是这样的
while( data[i] != '\0' )
{
char c = data[i++];
int counter = 1;
while( c == data[i] )
{
counter++;
i++;
}
if( counter - 1 )
printf( "%d", counter );
printf( "%c", c );
}
冲洗液
您需要这样做。这将清除标准输出和标准输入“fflush(null)”的缓冲区
好的,也许是这样。我不知道您想要文件中的数据
#include <stdio.h>
#include <stdlib.h>
int main( )
{
char ch, ch2, chvoid;
int i, num = 0, num2 = 0;
FILE *fp;
if( fp = fopen( "file.txt", "r" ) )
{
while( ch != EOF )
{
ch = getc( fp );
printf( "%c", ch );
}
fclose( fp );
}
if( fp = fopen( "file.txt", "r" ) )
{
int c = getc( fp );
while( c != EOF )
{
int c2 = getc( fp );
int counter = 1;
while( c2 == c )
{
counter++;
c2 = getc( fp );
}
if( counter - 1 )
printf( "%d", counter );
printf( "%c", c );
c = c2;
}
fclose( fp );
}
return 0;
}
#包括
#包括
int main()
{
char ch,ch2,chvoid;
int i,num=0,num2=0;
文件*fp;
如果(fp=fopen(“file.txt”,“r”))
{
while(ch!=EOF)
{
ch=getc(fp);
printf(“%c”,ch);
}
fclose(fp);
}
如果(fp=fopen(“file.txt”,“r”))
{
int c=getc(fp);
而(c!=EOF)
{
int c2=getc(fp);
int计数器=1;
而(c2==c)
{
计数器++;
c2=getc(fp);
}
如果(计数器-1)
printf(“%d”,计数器);
printf(“%c”,c);
c=c2;
}
fclose(fp);
}
返回0;
}
#包括
内部主(空){
文件*fp;
int ch,ch2,计数;
if(NULL==(fp=fopen(“file.txt”,“r”)){
perror(“文件无法打开”);
返回1;
}
printf(“数据示例:”);
而((ch=fgetc(fp))!=EOF){
putchar(ch);
}
putchar('\n');
倒带(fp);
printf(“答案示例:”);
计数=ch2=0;
而(1){
ch=fgetc(fp);
if(ch2!=ch){
如果(计数>1)
printf(“%d”,计数);
ch2&&putchar(ch2);//如果(ch2)putchar(ch2);
如果(ch==EOF)
打破
计数=1;
ch2=ch;
}否则{
++计数;
}
}
fclose(fp);
返回0;
}
如果我可以使用数组,情况就是这样:这与上面的问题有什么关系?这只是一个建议,就像过去我在迭代多个字符时经常遇到问题一样。我只想在注释中传递类似的建议。本网站的答案部分仅用于实际回答问题。您将获得所需的声誉(50)如果您在此处发布高质量的答案或问题,请立即发表评论。同时,请不要将这些评论或建议作为答案添加。好的,我很抱歉……将全部删除为什么您不能使用数组?我们可以假设这是一个学术练习吗?看起来您离此不远,但您正在比较递增的ch2 against ch由第一个循环设置为EOF。仔细检查后,看起来您试图像在数组中一样迭代for循环中的单个字符,但实际上ch和ch2都是EOF。您需要一种不同的循环策略:使用while not EOF和getc对字符串进行迭代,每次都存储上一个字符,这样您就可以mpare反对。getc
返回一个int
,原因很充分(请参阅),将其返回值存储在字符中会导致问题。请注意,假定要读取的数据不包含数字字符。
#include <stdio.h>
int main(void){
FILE *fp;
int ch, ch2, count;
if(NULL==(fp = fopen("file.txt", "r"))){
perror("file can not open.");
return 1;
}
printf("Example of data: ");
while((ch=fgetc(fp)) != EOF){
putchar(ch);
}
putchar('\n');
rewind(fp);
printf("Example of answer: ");
count = ch2 = 0;
while(1){
ch=fgetc(fp);
if(ch2 != ch){
if(count > 1)
printf("%d", count);
ch2 && putchar(ch2);//if(ch2)putchar(ch2);
if(ch == EOF)
break;
count = 1;
ch2 = ch;
} else {
++count;
}
}
fclose(fp);
return 0;
}