user-0 提问: 【求助】大神求帮忙 java转换为C语言

回复:
user: user-1
content: 希望楼上在此生弥留之际后悔没照我这段话做，浪费了很多大好青春。

user: user-2
content: 引用 3 楼 zhao4zhong1 的回复:不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！ 哈哈哈，我一看到标题就知道我又能看到这一段话了。。

user: user-3
content: 引用 8 楼 u013550545 的回复:引用 6 楼 SXJIAKE 的回复:引用 5 楼 u013550545 的回复:C语言吧贴吧的那个贾可?头像都一样，肯定是我了。晕，忘了我早换了头像，以前是 VIM 这个头像……不过在这里讨论这个没意义吧

user: user-4
content: 引用 6 楼 SXJIAKE 的回复:引用 5 楼 u013550545 的回复:C语言吧贴吧的那个贾可?头像都一样，肯定是我了。

user: user-4
content: 引用 6 楼 SXJIAKE 的回复:引用 5 楼 u013550545 的回复:C语言吧贴吧的那个贾可?头像都一样，肯定是我了。

user: user-3
content: 引用 5 楼 u013550545 的回复:C语言吧贴吧的那个贾可?头像都一样，肯定是我了。

user: user-4
content: 引用 4 楼 SXJIAKE 的回复:#include <stdio.h> #include <stdlib.h>  static int exchange(char chs[], int n, char ch);  int main(int argc, char *argv[]) {     int n = 0;     while (scanf("%d\n", &n) != EOF) {         int count[26] = { 0 };         char ch = '0';         int oddchar = 0;          char chs[256] = { 0 };         scanf("%s\n", chs);          int len = strlen(chs);          for (int j = 0; j < len; j++) {             int index = chs[j] - 'a';             count[index]++;         }          for (int i = 0; i < 26; i++) {             if (count[i] % 2 != 0) {                 oddchar++;                 ch = (char)(i + 'a');             }         }          if (oddchar > 1) {             printf("Impossible\n");         } else {             int result = exchange(chs, n, ch);             printf("%d\n", result);         }     }     return 0; }  static int exchange(char chs[], int n, char ch) {     int i;     int j;     int k;     int count = 0;     for (i = 0; i < n / 2; i++) {         if (chs[i] == ch) {             for (j = i; j < n - i - 1; j++) {                 if (chs[j] == chs[n - i - 1]) {                     break;                 }             }             count += j - i;              for (k = j; k > i; k--) {                 chs[k] = chs[k - 1];             }             chs[i] = chs[n - i - 1];         } else {             for (j = n - i - 1; j >= i; j--) {                 if (chs[j] == chs[i]) {                     break;                 }             }             count += n - i - 1 - j;              for (k = j; k < n - i - 1; k++) {                 chs[k] = chs[k + 1];             }             chs[n - i - 1] = chs[i];         }     }     return count; }C语言吧贴吧的那个贾可?

user: user-3
content: #include <stdio.h> #include <stdlib.h>  static int exchange(char chs[], int n, char ch);  int main(int argc, char *argv[]) {     int n = 0;     while (scanf("%d\n", &n) != EOF) {         int count[26] = { 0 };         char ch = '0';         int oddchar = 0;          char chs[256] = { 0 };         scanf("%s\n", chs);          int len = strlen(chs);          for (int j = 0; j < len; j++) {             int index = chs[j] - 'a';             count[index]++;         }          for (int i = 0; i < 26; i++) {             if (count[i] % 2 != 0) {                 oddchar++;                 ch = (char)(i + 'a');             }         }          if (oddchar > 1) {             printf("Impossible\n");         } else {             int result = exchange(chs, n, ch);             printf("%d\n", result);         }     }     return 0; }  static int exchange(char chs[], int n, char ch) {     int i;     int j;     int k;     int count = 0;     for (i = 0; i < n / 2; i++) {         if (chs[i] == ch) {             for (j = i; j < n - i - 1; j++) {                 if (chs[j] == chs[n - i - 1]) {                     break;                 }             }             count += j - i;              for (k = j; k > i; k--) {                 chs[k] = chs[k - 1];             }             chs[i] = chs[n - i - 1];         } else {             for (j = n - i - 1; j >= i; j--) {                 if (chs[j] == chs[i]) {                     break;                 }             }             count += n - i - 1 - j;              for (k = j; k < n - i - 1; k++) {                 chs[k] = chs[k + 1];             }             chs[n - i - 1] = chs[i];         }     }     return count; }

user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！

user: user-5
content: #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXLENGTH 100  int exchange(char chs[], int n, char ch)  {     int count = 0, i, j, k;     for (i = 0; i < n / 2; i++)  	{ 		if (chs[i] == ch)  		{ 			for (j = i; j < n - i - 1; j++)  			{ 				if (chs[j] == chs[n - i - 1])  				{ 					break; 				} 			} 			 			count += j - i; 			 			for (k = j; k > i; k--)  			{ 				chs[k] = chs[k - 1]; 			} 			chs[i] = chs[n - i - 1]; 			 		} else  		{ 			for (j = n - i - 1; j >= i; j--)  			{ 				if (chs[j] == chs[i])  				{ 					break; 				} 			} 			 			count += n - i - 1 - j; 			 			for (k = j; k < n - i - 1; k++)  			{ 				chs[k] = chs[k + 1]; 			} 			chs[n - i - 1] = chs[i]; 		}     }     return count;   }  int main() { 	char chs[MAXLENGTH]; 	while(gets(chs) != NULL) 	{ 		int count[26]; 		char ch = '0'; 		int oddchar = 0; 		int n; 		int i, j; 		if((strlen(chs)) == 0) 			break; 		n = atoi(chs); 		gets(chs); 		for (j = 0; chs[j] != '\0'; j++)  		{ 			int index = chs[j] - 'a'; 			count[index]++; 		} 		 		for (i = 0; i < 26; i++) 		{ 			if (count[i] % 2 != 0)  			{ 				oddchar++; 				ch = (char) (i + 'a'); 			} 		} 		 		if (oddchar > 1)  		{ 			printf("Impossible\n"); 		} else  		{ 			int result = exchange(chs, n, ch); 			printf("%d\n",result); 		} 	} 	return 0; }

user: user-6
content: 转成C不是很方便，C++就完全没问题： import和class->去掉 scanner->std::cin hasNext->std::cin::operator bool nextLine->std::getline toCharArray->不需要，直接在字符串上操作 new int[26]->记得填0，或者直接分配在栈上填零int count[26] = {0}; System.out.println->std::cout exchange(char[]...->如果用std::string，那么改成std::string&即可 以上C++元素在C中都有替代，就是getline比较麻烦（需要缓冲大小自动调整），剩下的直接抄