C语言求字符串反转

Lily_0607 2015-05-12 10:36:20

问题:字符串反转
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。例如:
输入abcd
输出dcba
C语言答案

#include <stdio.h>
#include <string.h>
int main()
{
char str1[1000];
gets(str1);
int len_str=strlen(str1);
char tmp;//注意是字符串
for(int i=0;i<len_str/2;i++)
{
tmp=str1[i];
str1[i]=str1[len_str-1-i];
str1[len_str-1-i]=tmp;
}
puts(str1);

return 0;

}
请教大神哪里出问题了
...全文
1924 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
l1234321l1 2015-06-02
  • 打赏
  • 举报
回复
这是一个效率极高的反转算法,用的int数组,你可以自己改成字符类型的
public static void Reverse(int[] array, int begin, int end)
{
    while (end > begin)
    {
        int temp = array[begin];
        array[begin] = array[end];
        array[end] = temp;

        begin++;
        end--;
    }
}

dcpfeiniao 2015-06-02
  • 打赏
  • 举报
回复
确实要用英文方便
Lily_0607 2015-05-23
  • 打赏
  • 举报
回复
发现错误了,华为OJ平台,要把所有的变量在前面定义,C语言提交不了改成C++可能就通过了
Lily_0607 2015-05-23
  • 打赏
  • 举报
回复
我也觉得没错,但是在华为OJ平台提交显示出错
ForestDB 2015-05-21
  • 打赏
  • 举报
回复
没什么太大的问题。
闲鱼野鸟 2015-05-21
  • 打赏
  • 举报
回复
for(int i=0;i<strlen(str)/2;i++) { swap(str[i],str[strlen(str)-i]); }
qianggelaile00 2015-05-21
  • 打赏
  • 举报
回复
引用 4 楼 mewiteor 的回复:
真●递归
#include<stdio.h>
int main(int argc)
{
	char c=getchar();
	if(c!='\n')
	{
		main(0);
		putchar(c);
	}
	if(argc)putchar('\n');
	return 0;
}
好个毛!一直调用main()是好风格么?在不同编译器里有不同问题!
FD_2013 2015-05-15
  • 打赏
  • 举报
回复
如果是数组反转,有种简单的方法是对数组下标解引用,然后将首尾做位与计算,二分
Minikinfish 2015-05-14
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
不支持汉字。
发现一个鸡蛋里挑骨头的赵老师,如果让我说,还不支持英文呢。 谁能写出一个什么都支持的程序?
sprawling 2015-05-14
  • 打赏
  • 举报
回复
还是使用英文最方便啊.
HelloWindow 2015-05-13
  • 打赏
  • 举报
回复
#include <iostream> #include <string> int main() { using namespace std; cout << "Enter a word: "; string word; cin >> word; // physically modify string object char temp; int i, j; for (j = 0, i = word.size() - 1; j < i; --i, ++j) { // start block temp = word[i]; word[i] = word[j]; word[j] = temp; } // end block cout << word << "\nDone\n"; return 0; }
金木dream 2015-05-13
  • 打赏
  • 举报
回复
int main() { char str1[1000]={0};//养成好习惯,开始定义数组是对数组进行初始化 char tmp; int i; int len_str; gets(str1); len_str=strlen(str1); //注意是字符串 for(i=0;i<len_str/2;i++)//vc6.0++中最好在函数开始声明变量类型,不然就会运行出错 { tmp=str1[i]; str1[i]=str1[len_str-1-i]; str1[len_str-1-i]=tmp; } puts(str1); return 0; }
赵4老师 2015-05-13
  • 打赏
  • 举报
回复
引用 8 楼 zhangxiangDavaid 的回复:
[quote=引用 3 楼 zhao4zhong1 的回复:] 不支持汉字。
如何同时支持汉字和英文字母呢?[/quote] 就算写出一个支持汉字(GBK、Unicode、BIG5、Shift-JIS、……)的字符串反转又如何? 不支持阿拉伯文…… 不支持甲骨文 不支持印加文 不支持古埃及文 不支持Unicode大于65535的字符串 不支持…… …… 谁以为字符串反转功能简单?!
苏叔叔 2015-05-13
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
不支持汉字。
如何同时支持汉字和英文字母呢?
苏叔叔 2015-05-13
  • 打赏
  • 举报
回复
引用 4 楼 mewiteor 的回复:
真●递归
#include<stdio.h>
int main(int argc)
{
	char c=getchar();
	if(c!='\n')
	{
		main(0);
		putchar(c);
	}
	if(argc)putchar('\n');
	return 0;
}
写得好!
赵4老师 2015-05-13
  • 打赏
  • 举报
回复
代理项或代理项对是一对共同表示单个字符的 16 位 Unicode 编码值。需要记住的关键一点是: 代理项对实际上是 32 位单个字符,不能再假定一个 16 位 Unicode 编码值正好映射到一个字符。 使用代理项对 代理项对的第一个值是高代理项,包含介于 U+D800 到 U+DBFF 范围内的 16 位代码值。 该对的第二个值是低代理项,包含介于 U+DC00 到 U+DFFF 范围内的值。通过使用代理项对, 16 位 Unicode 编码系统可以对已由 Unicode 标准定义的一百多万个其他字符 (220) 进行寻址。 在传递给 XmlTextWriter 方法的任何字符串中都可以使用代理项字符。不过,代理项字符在编写的 XML 中应该有效。例如,万维网联合会 (W3C) 建议不允许在元素或属性的名称中使用代理项字符。 如果字符串包含无效的代理项对,则引发异常。 另外,可以使用 WriteSurrogateCharEntity 写出与代理项对相对应的字符实体。字符实体以十六 进制格式写出,并用以下公式生成: (highChar -0xD800) * 0x400 + (lowChar -0xDC00) + 0x10000 如果字符串包含无效的代理项对,则引发异常。下面的示例显示将代理项对作为输入的 WriteSurrogateCharEntity 方法。 C#复制 // The following line writes 𐀀. WriteSurrogateCharEntity ('\uDC00', '\uD800'); 下面的示例生成一个代理项对文件,将其加载到 XmlReader 中,并用新的文件名保存文件。 然后,原始文件和新文件被加载回应用程序的 XML 文档对象模型 (DOM) 结构中以进行比较。 C#复制 char lowChar, highChar; char [] charArray = new char[10]; FileStream targetFile = new FileStream("SurrogatePair.xml", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); lowChar = Convert.ToChar(0xDC00); highChar = Convert.ToChar(0xD800); XmlTextWriter tw = new XmlTextWriter(targetFile, null); tw.Formatting = Formatting.Indented; tw.WriteStartElement("root"); tw.WriteStartAttribute("test", null); tw.WriteSurrogateCharEntity(lowChar, highChar); lowChar = Convert.ToChar(0xDC01); highChar = Convert.ToChar(0xD801); tw.WriteSurrogateCharEntity(lowChar, highChar); lowChar = Convert.ToChar(0xDFFF); highChar = Convert.ToChar(0xDBFF); tw.WriteSurrogateCharEntity(lowChar, highChar); // Add 10 random surrogate pairs. // As Unicode, the high bytes are in lower // memory; for example, word 6A21 as 21 6A. // The high or low is in the logical sense. Random random = new Random(); for (int i = 0; i < 10; ++i) { lowChar = Convert.ToChar(random.Next(0xDC00, 0xE000)); highChar = Convert.ToChar(random.Next(0xD800, 0xDC00)); charArray[i] = highChar; charArray[++i] = lowChar; } tw.WriteChars(charArray, 0, charArray.Length); for (int i = 0; i < 10; ++i) { lowChar = Convert.ToChar(random.Next(0xDC00, 0xE000)); highChar = Convert.ToChar(random.Next(0xD800, 0xDC00)); tw.WriteSurrogateCharEntity(lowChar, highChar); } tw.WriteEndAttribute(); tw.WriteEndElement(); tw.Flush(); tw.Close(); XmlTextReader r = new XmlTextReader("SurrogatePair.xml"); r.Read(); r.MoveToFirstAttribute(); targetFile = new FileStream("SurrogatePairFromReader.xml", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); tw = new XmlTextWriter(targetFile, null); tw.Formatting = Formatting.Indented; tw.WriteStartElement("root"); tw.WriteStartAttribute("test", null); tw.WriteString(r.Value); tw.WriteEndAttribute(); tw.WriteEndElement(); tw.Flush(); tw.Close(); // Load both result files into the DOM and compare. XmlDocument doc1 = new XmlDocument(); XmlDocument doc2 = new XmlDocument(); doc1.Load("SurrogatePair.xml"); doc2.Load("SurrogatePairFromReader.xml"); if (doc1.InnerXml != doc2.InnerXml) { Console.WriteLine("Surrogate Pair test case failed"); } 在使用 WriteChars 方法(一次写出一个缓冲区的数据)写出时,输入中的代理项对可能 会在一个缓冲区内被意外拆分。由于代理项值是定义完善的,如果 WriteChars 遇到来自 较低范围或者较高范围的 Unicode 值,它将该值标识为代理项对的一半。当遇到 WriteChars 将导致从拆分代理项对的缓冲区写入的情况时,将引发异常。使用 IsHighSurrogate 方法检查缓冲区是否以高代理项字符结束。如果缓冲区中的最后一个 字符不是高代理项,可以将该缓冲区传递给 WriteChars 方法。 请参见 概念 使用 XmlTextWriter 创建格式正确的 XML XmlTextWriter 的 XML 输出格式设置 XmlTextWriter 的命名空间功能
mewiteor 2015-05-13
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
[quote=引用 8 楼 zhangxiangDavaid 的回复:] [quote=引用 3 楼 zhao4zhong1 的回复:] 不支持汉字。
如何同时支持汉字和英文字母呢?[/quote] 就算写出一个支持汉字(GBK、Unicode、BIG5、Shift-JIS、……)的字符串反转又如何? 不支持阿拉伯文…… 不支持甲骨文 不支持印加文 不支持古埃及文 不支持Unicode大于65535的字符串 不支持…… …… 谁以为字符串反转功能简单?![/quote]linux下utf-8编码输入应该够用了
#include<stdio.h>
int main(int argc) {
	char c[8];
	size_t n=0,i;
	c[0]=getchar();
	while(c[0]<<n&0x80) ++n;
	for(i=1;i<n;++i)c[i]=getchar();
	if(c[0]!='\n') {
		main(0);
		putchar(c[0]);
		for(i=1;i<n;++i)putchar(c[i]);
	}
	if(argc)putchar('\n');
	return 0;
}
苏叔叔 2015-05-12
  • 打赏
  • 举报
回复
递归实现:

void str_rev(char *str)
{
	if (NULL == str) return;
	if ('\0' == *str) return;
	else str_rev(str + 1);
	printf("%c", *str);
}
int main()
{
	char str1[1000];
	gets(str1);
	str_rev(str1);
	return 0;
}
//David
//divaD
苏叔叔 2015-05-12
  • 打赏
  • 举报
回复
没有问题,一切正常
mewiteor 2015-05-12
  • 打赏
  • 举报
回复
真●递归
#include<stdio.h>
int main(int argc)
{
	char c=getchar();
	if(c!='\n')
	{
		main(0);
		putchar(c);
	}
	if(argc)putchar('\n');
	return 0;
}
加载更多回复(1)
几个字符串处理函数增强版 常用需基本都能完成 已经编译成DLL 函数列表 兼容字符和串 void revstr char str 字符串反转 int substring char res int pos int len char substr 从pos开始取len个字符到substr中 返回1成功 0失败 int strindex char res int pos char substr 返回substr在resource中在pos后出现的位置 返回0表示没找到 int del substr char res int pos int len 从res的pos位置开始删除len个字符 1成功 0失败 int insert substr char res char pos char const substr 在res的pos前插入substr 1成功 0失败 int strreplace char res char substr char desstr 替换res中的substr为desstr 1成功 0失败 int str count char res char substr 统计res中的substr出现的次数 int cut str char res char mark int pos char substr 取res中第pos个用mark分隔的串存入sunstr 1成功 0失败 int str cat char str const char args 拼接多个字符串常量存入str 1成功 0失败 int strarray cat char arr [str max len] int i char str 把二维arr字符串数组拼接成一个串 i是第一维的长度 存入str int replacate char res int n char const str 产生n个重复的str 串或者字符 存入res ">几个字符串处理函数增强版 常用需基本都能完成 已经编译成DLL 函数列表 兼容字符和串 void revstr char str 字符串反转 int substring char res int pos int len char substr 从pos开始取len个字符到substr中 返回1成功 0失败 int strindex char r [更多]

33,323

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧